2016-06-03 15 views
7

मैं कोणीय 2, टाइपस्क्रिप्ट, आरएक्सजे इत्यादि सीख रहा हूं और मुझे आरएक्सजे और ऑब्जर्वेबल का उपयोग कर सेवा के अंदर डेटा का सबसेट लौटने में कोई समस्या है।आरएक्सजे के साथ छोड़ें और टेक का उपयोग कैसे करें

मुझे उम्मीद है कि GetCars नीचे एक जेसन फ़ाइल पढ़ने के लिए कार्य करें, इसे पार्स करें और डेटा (ऑफ़सेट और गिनती) का एक टुकड़ा वापस करें। हालांकि, मुझे हमेशा सभी डेटा वापस मिलते हैं (मेरे पास उस फ़ाइल में 200 इकाइयां/कार हैं जिनके साथ मैं परीक्षण कर रहा हूं)।

मैं क्या गलत कर रहा हूं?

EntityService

@Injectable() 
export class EntityService { 

    constructor(private http: Http) { } 

    getCars(offset: number, count: number): Observable<Car[]> { 
    return this.http 
     .get('resources/data/cars.json') 
     .map(this.extractData) 
     .skip(offset) 
     .take(count) 
     .catch(this.handleError); 
    } 

    private extractData(res: Response) { 
    let body = res.json(); 
    return body.data || {}; 
    } 

    private handleError(error: any) { 
    // ... 
    } 
} 

cars.json

{ 
     "data":[ 
      { 
       "vin":"ee8a89d8", 
       "brand":"Fiat", 
       "year":1987, 
       "color":"Maroon" 
      }, 
      { 
       "vin":"642b3edc", 
       "brand":"Renault", 
       "year":1968, 
       "color":"White" 
      } 
    ] 
} 

उत्तर

7

वास्तव में आप हमेशा यह सब का उपयोग कर डेटा लोड होगा। skip और take ऑपरेटरों पर लागू होते हैं, तो आप कई घटनाओं डाटा प्रवाह में प्राप्त हुआ है:

  • छोड़: छोड़ आयोजनों की
  • ले: खाते में घटनाओं
  • का केवल एक निर्धारित संख्या में ले

आपके मामले में (एक HTTP अनुरोध), आपके पास केवल एक है: जब आप डेटा प्राप्त करते हैं। इसलिए यदि आप डेटा को फ़िल्टर करना चाहते हैं, तो आपको map ऑपरेटर का उपयोग करने की आवश्यकता है। कुछ ऐसा:

getCars(offset: number, count: number): Observable<Car[]> { 
    return this.http 
    .get('resources/data/cars.json') 
    .map(this.extractData) 
    .map(data => { 
     return data.slice(offset, offset + count); // <---- 
    }) 
    .catch(this.handleError); 
} 
+0

यदि मैं आपको अच्छी तरह से समझता हूं, तो इसका मतलब यह है कि लौटाए गए डेटा पर स्किप/टेक ऑपरेशन नहीं किए गए थे। उसका कुछ मतलब है। Merci Thierry। – Martin

संबंधित मुद्दे