2016-06-27 31 views
11

क्या अनुरोधों में से कोई एक विफल होने पर भी http.get अनुरोधों को फोर्कजो करना जारी रखना संभव है।कोणीय 2 आरएक्सजेएस अवलोकन करने योग्य फोर्कजोइन

मैं angular2 में $ q.allSettled के समान कार्य को देख रहा हूं।

उदाहरण देखें: http://jsfiddle.net/Zenuka/pHEf9/

angular.module('qAllSettled', []).config(function($provide) { 
    $provide.decorator('$q', function($delegate) { 
    var $q = $delegate; 
    $q.allSettled = function(promises) { 
     return $q.all(promises.map(function(promise) { 
     return promise.then(function(value) { 
      return { state: 'fulfilled', value: value }; 
     }, function(reason) { 
      return { state: 'rejected', reason: reason }; 
     }); 
     })); 
    }; 
    return $q; 
    }); 
}); 

कब

उत्तर

6

का उपयोग करता है Observable.forkJoin() एकाधिक समवर्ती http.get() अनुरोधों को चलाने के लिए। यदि कोई भी अनुरोध विफल रहता है तो पूरे ऑपरेशन के परिणामस्वरूप त्रुटि स्थिति होगी।

getBooksAndMovies() { 
    Observable.forkJoin(
     this.http.get('/app/books.json').map((res:Response) => res.json()), 
     this.http.get('/app/movies.json').map((res:Response) => res.json()) 
    ).subscribe(
     data => { 
     this.books = data[0] 
     this.movies = data[1] 
     }, 
     err => console.error(err) 
    ); 
+0

प्रतिक्रिया के लिए धन्यवाद, आप एक उदाहरण प्रदान कर सकते हैं? – kabus

+6

डाउनवोट क्योंकि यह ओपी प्रश्न को हल नहीं करता है कि अनुरोध जारी रखने के तरीके में से कोई एक विफल रहता है। क्या फोर्कजॉइन गैर-असफल अनुरोधों को पूरा करने का इंतजार कर रहा है या क्या यह तुरंत विफल हो जाता है? – corolla

+0

@AngJobs क्या प्रत्येक सरणी तत्व के लिए त्रुटियों को संभालने का कोई तरीका है? मुझे यूआई को उस विशिष्ट तत्व के लिए त्रुटि संदेश के साथ अद्यतन करने की आवश्यकता है जो विफल रहता है। मैंने res (ब्लॉक) => {} को res के बाद जोड़ा है: ब्लॉक लेकिन यह पूरी सरणी के लिए अंतिम विफलता पर कूदता है –

24

आप प्रत्येक नमूदार के लिए लाभ उठाने सकता है catch ऑपरेटर त्रुटि रोकना और इस तरह के मामलों में एक और नमूदार वापस जाने के लिए:

getBooksAndMovies() { 
    return Observable.forkJoin(
     this.http.get('/app/books.json').map((res:Response) => res.json()), 
     this.http.get('/app/movies.json').map((res:Response) => res.json()) 
    ); 

लेकिन आप त्रुटि हैंडलर में अपनी अतिरिक्त GET अनुरोध डाल सकता है।

यहाँ एक नमूना है:

return Observable.forkJoin(
    this.http.get('/some-url') 
     .map((res:Response) => res.json()) 
     .catch(res:Response => Observable.of({}), 
    this.http.get('/some-other-url') 
     .map((res:Response) => res.json()) 
     .catch(res:Response => Observable.of({}), 
); 
संबंधित मुद्दे