来自RxJS承诺的流

时间:2015-08-20 17:51:48

标签: javascript functional-programming promise reactive-programming rxjs

我正在尝试在我正在根据承诺创建的流上运行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?

1 个答案:

答案 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 …;
}, [])
…
相关问题