RxJs组合观测量

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中,结果不是打印的

+0

您是否尝试过'Observable.forkJoin([obs1,obs2,...])'? – Brad

+0

是的,我做过。我也没有成功。如上所述,我只是遇到错误或无限的API调用。 :( –

+0

它引发了什么错误?运算符'Observable.forkJoin()'应该做你需要的。 – martin

另一个选项是尝试combineLastest。以下假设您的传入和传出帐户呼叫正在返回FirebaseListObservable,并且您正试图将它们合并到一个列表中(accounts)。

这可能是件好事添加临时.do()副作用,每个输入流,看他们是否被调用,在第一时间返回结果,特别是因为组合块似乎并没有被调用你的前面的例子。