2016-03-15 14 views
6

Tüm uygulamalarımızın geçerli yapı sayısını farklı sunucularda izleyecek bir uygulama yazıyorum. Bu, her uygulamada bir txt dosyasına bir http isteği yaparak yapılır. Bunu bir foreach döngüsü kullanarak yapıyorum.Angular2 HTTP çağrılarının tamamının ne zaman tamamlandığı biliniyor

Yaşadığım sorun, tüm isteklerin ne zaman tamamlandığını (Gözlemlerin Kullanılması) bildiğinden emin değilim.

İstekler geri geldiğinde, yanıtı bir nesne dizisinin özelliği olarak ekledim. Sonra tüm verilere sahip olduğumda, bunu bir Pipo tarafından filtrelenen bileşenin şablonuna bağlarım. Bu nedenle, tüm veriler bitene kadar bağlamadığımdan emin olmalıyım. İşte

burada veri alıyorum nasıl:

this.apps.forEach(app => { 
    app.Environments.forEach(env => { 
    this._buildMonitorService.getBuilds(env.URL) 
     .subscribe((data) => {  
     setupBuilds(this.apps,data.url,data._body); 
     });     
    }); 
}); 

setupBuilds uygulamaların benim diziye tepkisini ekler.

aradığım şey etkili şekilde setupBuilds veri kurulum için this.builds bağlamak olacak bir Promise.all ama rxjs ile

cevap

14

Observable.forkJoin eşdeğerdir gözlenebiliri bunu nasıl bilmiyorum Promise.all ama gözlenebilirler için.

var observables = []; 
this.apps.forEach(app => { 
    app.Environments.forEach(env => { 
    observables.push(this._buildMonitorService.getBuilds(env.URL)); 
    }); 
}); 

Observable.forkJoin(observables).subscribe(
    (result) => { 
    result.forEach((data) => { 
     setupBuilds(this.apps,data.url,data._body); 
    }); 
    } 
); 

tüm istekleri infaz edildiğini emin olacaktır Bu şekilde:

kodunuzu refactor olabilir yoludur: Burada

bir örnek Abone metoduna kayıtlı geri arama çağrıldığında ...

+0

Yani, bunu (önce kendi yolumuzu ve sonra tekrar düzenlenmiş kodunuzla) kurmayı denedim ve “Gözlemlenebilir_1.Observable.forkJoin bir fonksiyon değil” –

+0

Ben cevabın ne olduğumu düşünüyorum arıyorum, ama çok çalışmıyor –

+0

Operatörü içe aktarmanız gerekiyor: 'import 'rxjs/add/operator/forkJoin'; veya rxjs' import 'rxjs/Rx' 'den her şeyi içe aktarın; ' –

İlgili konular