我需要一种方法来将值从可观察的传递到两个函数,每个函数接受一个值,然后每个函数返回一个可观察的值(只发送一个值,然后完成)。我希望.combineLatest()允许我传递一个投影函数,但它没有。
示例代码(不起作用):
const ac = [1, 2, 3]; // only as example, I have complex types in my array not numbers
Observable.from(ac)
.combineLatest(
// processFn should get a number as argument and return Observable<number>
// does not work because .combineLatest does not accept two functions as arguments :(
n => processFn1(n),
n => processFn2(n)
)
.map(([result1, result2] => {
// result1, result2 should be flat numbers here, not Observables
})
);知道怎么做吗?
发布于 2016-11-17 12:44:06
您使用combineLatest操作符的想法是正确的,但它在错误的位置。如果您需要使用可观察到的数据,则应该使用mergeMap。这是一个符合您预期的JSBIN:http://jsbin.com/rutovot/4/edit?html,js,console
代码如下所示:
const ac = [1, 2, 3];
Rx.Observable.from(ac)
// use mergeMap, it takes a function that accepts a value and
// returns an observable. MergeMap will listen to this observable
// under the hood and next the result of this observable down the
// the chain
.mergeMap(val => {
// Here we return an observable that combines the result of the
// call to both the functions
return Rx.Observable.combineLatest(fake(val), fake2(val));
})
.subscribe(val => console.log(val));https://stackoverflow.com/questions/40651842
复制相似问题