İsteklerden biri başarısız olsa bile http.get isteklerine forkjoin devam etmek mümkün mü?angular2 rxjs gözlenebilir forkjoin
Angular2'de $ q.allSettled'in benzer bir işlevini arıyorum.
İsteklerden biri başarısız olsa bile http.get isteklerine forkjoin devam etmek mümkün mü?angular2 rxjs gözlenebilir forkjoin
Angular2'de $ q.allSettled'in benzer bir işlevini arıyorum.
çoklu eşzamanlı http.get() istekleri çalıştırmak için() Observable.forkJoin kullanır 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;
});
});
Kab:
örneğe bakın. Tek bir istek başarısız olursa, tüm işlem hata durumuna neden olur.
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)
);
Sen hatayı yakalamak ve bu gibi durumlarda başka gözlemlenebilir dönmek her gözlemlenebilir için catch
operatörü kaldıraç olabilir:
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())
);
Ama hata işleyicisi içinde ek GET isteği koyabilirsiniz. Bir örnek verebilir, yanıt için
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({}),
);
Teşekkür: Burada
bir örnektir? – kabusdownvote çünkü OP'lerden biri, bunlardan biri başarısız olursa, isteklerin nasıl devam edeceği sorusunu çözmez. ForkJoin, başarısız olan isteklerin tamamlanmasını bekliyor mu yoksa hemen kendini mi başarısız? – corolla
@AngJobs Her dizi öğesi için hataları işlemenin bir yolu var mı? Kullanıcı arabirimini, başarısız olan belirli bir öğe için bir hata iletisiyle güncellemem gerekiyor. Res: block komutundan sonra bir (err) => {} ekledim ama sadece tüm dizi için son başarısızlığa atlıyor –