我正在尝试在我正在根据承诺创建的流上运行reduce
。
在下面的示例中,myApi.getItemsAsync()
返回一个数组。
我希望可以使用数组中的每个项调用reduce
回调。相反,它是用整个数组调用的。
Rx.Observable.fromPromise(
myApi.getItemsAsync()
)
.reduce(function (acc, item) {
// expecting `item` to be a single item
// instead, seeing the entire array
}, [])
.subscribe(function (result) {
console.log(result);
});
如果myApi.getItemsAsync()
是一个返回数组的同步函数,则reduce按预期工作,调用数组中每个项的回调。
我如何才能使用promises?
答案 0 :(得分:2)
reduce正在处理整个流,而不是作为其中一部分发出的数组。
如果你想使用数组方法,那么它应该是
Rx.Observable.fromPromise(myApi.getItemsAsync())
.map(function(array) {
return array.reduce(function (acc, item) {
return …;
}, []);
})
…
如果您要使用stream方法,则需要先在流中注入数组项。我想在您的同步版本中使用了fromArray。加上承诺,你会做到
Rx.Observable.fromPromise(myApi.getItemsAsync())
.flatMap(function(array) {
return Rx.Observable.fromArray(array);
}).reduce(function (acc, item) {
return …;
}, [])
…