小编Mar*_*tin的帖子

为什么 switchMap 运算符在与 promise 一起使用时只发出最后一个值?

我很难理解这一点。当我将 switchMap 运算符与 Observable 一起使用时,它会按预期发出所有值:

Observable.from([1, 2, 3, 4, 5])
    .do(console.log)
    .switchMap(i => Observable.of('*' + i))
    .do(console.log)
    .subscribe();
Run Code Online (Sandbox Code Playgroud)

结果:

1
*1
2
*2
3
*3
4
*4
5
*5
Run Code Online (Sandbox Code Playgroud)

但是当我用 Promise 替换 Observable 时,我得到了不同的行为:

Observable.from([1, 2, 3, 4, 5])
    .do(console.log)
    .switchMap(i => new Promise((resolve) => resolve('*' + i)))
    .do(console.log)
    .subscribe();
Run Code Online (Sandbox Code Playgroud)

结果:

1
2
3
4
5
*5
Run Code Online (Sandbox Code Playgroud)

promise observable rxjs rxjs5 switchmap

6
推荐指数
1
解决办法
635
查看次数

标签 统计

observable ×1

promise ×1

rxjs ×1

rxjs5 ×1

switchmap ×1