记住这段代码:
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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)