我有一些难以理解。当我在Observable中使用switchMap运算符时,它会按预期发出所有值:
Observable.from([1, 2, 3, 4, 5])
.do(console.log)
.switchMap(i => Observable.of('*' + i))
.do(console.log)
.subscribe();
结果:
1
*1
2
*2
3
*3
4
*4
5
*5
但是当我用 Promise 替换 Observable 时,行为会有所不同:
Observable.from([1, 2, 3, 4, 5])
.do(console.log)
.switchMap(i => new Promise((resolve) => resolve('*' + i)))
.do(console.log)
.subscribe();
结果:
1
2
3
4
5
*5
switchMap
接收到1
并订阅了new Promise()
。然后在同一帧中,它接收到2
并取消订阅之前的Promise
并订阅新的Promise
。依此类推,直到5
及其Promise
最终结束帧,JS 才会计算另一个帧,在该帧中只有最后一个活动的Promise
被解决。 - martin