Rxjs 观测值数组的合并结果
我需要从我的状态中提取ID作为单独的Rxjs 观测值数组的合并结果,rxjs,observable,Rxjs,Observable,我需要从我的状态中提取ID作为单独的Observables,将它们组合成一个Observable和subscribe()。 我需要我的订户最终得到一组解析的可观察的结果 此外,我还需要保持此订阅打开,因此如果我的内部可观察的更改之一,我的订户将收到通知 这是我的代码: getTransactionsById(TransactionId){ 可观察的返回(事务ID) .map(transactionID=>this.getTransactionByID(transactionID)); } thi
Observable
s,将它们组合成一个Observable
和subscribe()
。
我需要我的订户最终得到一组解析的可观察的结果
此外,我还需要保持此订阅打开,因此如果我的内部可观察的
更改之一,我的订户将收到通知
这是我的代码:
getTransactionsById(TransactionId){
可观察的返回(事务ID)
.map(transactionID=>this.getTransactionByID(transactionID));
}
this.TransactionService.GetTransactionsById(TransactionId)
.订阅(交易=>{
....
})
上述代码在subscriber函数中的结果是一个未解析存储的数组
如何解析每个存储并将它们组合在一起
我还尝试在transactionId
s上使用Observable.from()
,将每个ID转换为Observable
,然后解析它。它工作正常,但我的订户会分别收到每个ID的通知。如果有办法批量处理所有可观察的.from()
结果(同时保持订阅打开),请告诉我
这就是我的Observable.from()
看起来的样子:
getTransactionsById(TransactionId){
返回事务ID
.mergeMap(transactionID=>this.getTransactionByID(transactionID));
}
this.TransactionService.GetTransactionsById(可观察的.from(TransactionId))
.订阅(交易=>{
....
})
我想你想要的是组合测试。它不会发出任何值,直到所有内部可见光发出至少一个值。在这之后,每次有一个新的发射来自一个内部可观测物时,它都会发射最近的一个
以下是一些阅读材料:
以下是一个例子:
函数getTransactionByID(transactionId){
让计数=0;
返回(transactionId)的可观测接收值
.delay(Math.random()*4000)
.map(x=>`${x}:${count++}`)
.重复();
}
函数getTransactionsById(TransactionId){
返回Rx.Observable.CombineTest(transactionID=>getTransactionByID(transactionID));
}
const transactionsIDs=[1,2,3];
GetTransactionsById(事务ID)
.take(10)
.subscribe(x=>{console.log(x);})代码>
你想要什么样的行为还不完全清楚,但你很可能想要或者
分叉连接
当所有观测值完成时,发出一个数组,其中包含每个观测值最后发出的值
拉链
订阅所有内部观测值,等待每个观测值发出一个值。一旦发生这种情况,将发出具有相应索引的所有值。这将一直持续到至少一个内部可观察对象完成为止
组合测试
当任何可观察对象发出值时,从每个对象发出最新的值
例如:
getTransactionsById(TransactionId){
const transactions=transactionID.map(transactionID=>this.getTransactionByID(transactionID));
返回Observable.forkJoin(…事务);//如果需要,更改为zip或CombineTest
}
this.TransactionService.GetTransactionsById(['1','2','3'])
.订阅(([第一、第二、第三])=>{
log({first,second,third});
});
CombineTest的重要注意事项(来自文档):--在每个可观察对象至少发出一个值之前,不会发出初始值