RxJs组合观测量
问题描述:
我想,当我有我想结合成Angular2和Angularfire2单值的两个观测量RxJs组合观测量
让我们来想象我的银行账户和两种类型,传出和传入的交易(解决问题它是我为实践目的而创建的正式用例)。我想将它们汇总在一起以获得实际帐户余额。
模板:
....
<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;
}
)
}
这一个使上火力地堡无限循环(并且不显示在模板数据)。我也试过Observer.merge()
和其他一些,但我想我只是想用绝对错误的方法。
感谢任何帮助,谢谢!
编辑:
只是尝试另一种解决方案,只使用一个流计算所有传入的事务:
public getAllIncoming(account: IAccount){
return this.getIncomingTransactionsForAccount(account)
.scan((x, y) => {
console.log(x, y);
return 1;
}, 0);
}
再次产生无限查询。
EDIT2:
我试图也如上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
)。
这可能是件好事添加临时.do()
副作用,每个输入流,看他们是否被调用,在第一时间返回结果,特别是因为组合块似乎并没有被调用你的前面的例子。
您是否尝试过'Observable.forkJoin([obs1,obs2,...])'? – Brad
是的,我做过。我也没有成功。如上所述,我只是遇到错误或无限的API调用。 :( –
它引发了什么错误?运算符'Observable.forkJoin()'应该做你需要的。 – martin