[英]RxJs Combine Observables
我正在嘗試解決問題,當我有兩個Observables,我想在Angular2和Angularfire2中組合成單個值
讓我們想象一下,我有兩種類型的銀行賬戶和交易,傳出和傳入(它只是用於實踐目的而創建的用例)。 我想將它們加在一起以獲得實際的賬戶余額。
模板:
....
<div *ngFor="let account of accounts | async">
{{ (transactionService.getAccountBalance(account) | async )?.balance }}
</div
....
最后應該提供數據的服務
getAccountBalance(account){
return Observable.zip(
this.getIncomingTransactionsForAccount(account), // FirebaseListObservable
this.getOutcomingTransactionsForAccount(account) // FirebaseListObservable
, (incoming, outcoming) => {
....
let result = {
account: account.$key,
balance: someCalculatedNumber
};
console.log(result); // result is correct there
return result;
}
)
}
這個導致Firebase無限循環(並且不在模板中顯示數據)。 我也試過Observer.merge()
和其他一些但我認為我只是試圖使用絕對錯誤的方法。
感謝任何幫助,謝謝!
編輯 :
剛試過另一個解決方案,只使用一個流來計算所有傳入的事務:
public getAllIncoming(account: IAccount){
return this.getIncomingTransactionsForAccount(account)
.scan((x, y) => {
console.log(x, y);
return 1;
}, 0);
}
再次生成無限查詢。
編輯2 :
我也試過forkJoin
public getAccount2Balance(account: IAccount) {
return Observable.forkJoin([
this.getIncomingTransactionsForAccount(account),
this.getOutcomingTransactionsForAccount(account)
], (incoming, outcoming) => {
...
let result = {
account: account.$key,
balance: someCalculatedNumber
};
console.log(result);
return result;
})
}
使用與上面相同的模板。 結果:值未顯示在模板和console.log中,結果未打印
另一個選擇是嘗試combineLastest
。 下面假設您的傳入和傳出帳戶調用返回FirebaseListObservable
並且您嘗試將它們合並到一個列表( accounts
)中。
return Observable.combineLatest(
// added .do() to make sure incoming is working
this.getIncomingTransactionsForAccount(account)
.do(x => console.log('incoming transactions', x),
// added .do() to make sure outcoming is working
this.getOutcomingTransactionsForAccount(account)
.do(y => console.log('outcoming transactions', y),
(incoming, outcoming) => {
// ... do your calculations
let result = {
// results
};
return result;
}
);
最好為每個輸入流添加臨時的.do()
副作用,以查看它們是否被調用並首先返回結果,特別是因為在前面的示例中似乎沒有調用combine塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.