rxjs5 - Observable.prototype.concatAll 似乎没有产生预期的结果

标签 rxjs5 angular2-observables

记住这段代码:

const Rx = require('rxjs');

var i = 3;

const obs = Rx.Observable.interval(10)
    .map(() => i++)
    .map(function(val){
        return Rx.Observable.create(obs => {
            obs.next(val)
        });
    })
    .take(10)
    .concatAll();


obs.subscribe(function(v){
    console.log(v);
});

我希望记录的结果类似于:

[3,4,5,6,7,8,9,10,11,12]

即 10 个值,从 3 开始。

然而,我们得到的只是

3

有人知道为什么会这样吗?

最佳答案

concatMap 将等待第一个可观察的完成,然后再订阅下一个。您忘记将 .complete() 添加到您的内部可观察对象中,实际上让您的流仅发出第一个值 3 并无限期地等待第一个流完成,然后再连接在它的旁边。

注意;对于根据您的问题进行简单的值发射,您还可以使用 Rx.Observable.of() 而不是 Rx.Observable.create()

var i = 3;

const obs = Rx.Observable.interval(10)
  .map(() => i++)
  .map(val => Rx.Observable.of(val))
  .take(10)
  .concatAll();

obs.subscribe(v => console.log(v));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>

关于rxjs5 - Observable.prototype.concatAll 似乎没有产生预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41529308/

相关文章:

typescript - 无法从 TypeScript 中的 Observable.bindNodeCallback(fs.readFile) 创建可观察对象

Angular 2 & RxJs catch 函数回调绑定(bind)到 'this' 导致 http 请求一遍遍重复

angular - Observable.forkJoin() 不执行

angular - 如何使用 observables 在 angular2 中异步绑定(bind)下拉列表?

rxjs5 - 在带有 switchMap 的嵌套管道中进行 distinctUntilChanged

angular - 使用 Observables/RxJS 合并 Angular 中的两个依赖 API 调用

可观察的 zip(数组)的 RXJS zip 未触发

javascript - 在订阅 angular2 之前过滤 Observables

node.js - 无法从串联的 Observable 中提取/解开值

javascript - RxJs5 在没有运动时发出信号