【问题标题】:RxJS: Splitting an array result from Observable.fromPromiseRxJS:从 Observable.fromPromise 拆分数组结果
【发布时间】:2015-08-27 01:14:57
【问题描述】:

我在这里使用 RxJS,我似乎无法克服这个看似简单的问题。

rx.Observable
    .from([1,2,3,54,3,22,323,23,11,2])
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });

上述代码按预期顺序吐出每个数组项。

rx.Observable
    .fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2]))
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });

function getNumbers (nums) {
    return new Promise(function (resolve, reject) {
        resolve(nums);
    });
}

虽然我只得到完整的数组(即[ 1, 2, 3, 54, 3, 22, 323, 23, 11, 2 ])。 RxJS 不应该把结果分开吗?我希望它至少有一些逻辑。

谢谢

【问题讨论】:

  • 另外,我绝对愿意执行某种转换,承诺解决之后可能会改变流......例如接收完整的数组(流中的 1 项)并将其转换为流中的 array.length 项。

标签: arrays reactive-programming rxjs


【解决方案1】:

不,它不会隐式地将它们分开。如果您想拆分它们,请使用 flatMap 将数组展平:

 rx.Observable
    .fromPromise(getNumbers([1,2,3,54,3,22,323,23,11,2]))
    .flatMap(function(x) { return x; })
    .distinct()
    .subscribe(function next (x) {
        console.log('Next');
        console.log(x);
    }, function error (x) {
        console.log('Error');
        console.log(x);
    }, function completed () {
        console.log('Completed');
    });

【讨论】:

  • 谢谢!这正是我一直在寻找的
  • 可爱,我不知道flatMap 会压扁一个可迭代对象。
  • 哇,很好的答案,解决了我的问题,非常感谢@paulpdeniels
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多