簡體   English   中英

如何為RXJS中的每個可觀察對象執行函數

[英]How to execute function for each observable in RXJS

我有這樣一個可觀察的情況:

//pseudo code
var agreement:Observable<agreement[]> = Observable.ajax({...})
    .flatMap(agreements:[] => {
        agreements.forEach(agreement =>{
           //server request for each agreement
           //If request fail throw exception
        });
        return agreements;
    })
    .map(agreements => agreements);

在這里,我需要檢查每個協議是否存在於其他服務器中,如果不存在則拋出異常。 主要問題是如何等待所有所有協議都被檢查並得到結果。

答案取決於在forEach循環中發生的事情–如果您使用forEach發出的agreements (進入flatMap agreements )是可觀察的,則該策略會有所不同,因為您不一定知道如何將發射許多agreement對象。

假設forEach只是在運行其他一些基本的http調用,例如,一個返回諾言的答案,那么答案將是涉及收集諾言並允許他們全部完成Promise-way ,這樣就可以完成了轉換為鏈中下一個運算符的Observable。

一些偽代碼:

var agreement: Observable<agreement[]> = Observable.ajax({...})
    .flatMap(agreements:[] => {
        const promises = agreements.map(agreement => doHttpThing()
            .then(...)
            .catch(err => Observable.throw(err))
        );
        return Observable.fromPromise(Promise.all(promises));
    })
    .map(agreements => agreements);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM