又开始了rxjs - 与promise的比较

Posted 黄小波波

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了又开始了rxjs - 与promise的比较相关的知识,希望对你有一定的参考价值。

1.promise 的 resolve 与 reject,任何时候都是异步的,会将回调放在下一个微任务的循环中调用

let nn = Promise.resolve(\'niahoP1\');
nn.then(console.log)
console.log(\'niahoP2\')
//  niahoP2  niahoP1

2.rxjs 的 subscribe 是同步的,流更新之后立刻就会同步调用订阅者

let su = new rxjs.Subject()
console.log(\'nihao1\')
su.subscribe(console.log);
su.next(\'nihao3\')
console.log(\'nihao2\')
//  nihao1 nihao3 nihao2
// 很遗憾,但是事实就是这样的

3.流处理中发生了任何的未捕获的错误,都会导致这个流挂掉,后面再更新流无法触发订阅

let {map, switchMap} = rxjs.operators;
let { Subject } = rxjs;
let ss = new Subject();
ss.pipe(
    map(value => {
        console.log(value, Object.keys(value), \'keys\')
        // console.log(value.b.c)
        // 正常情况 > ss  2
        // 放开这一行会有一个执行错误,这时结果为  TypeError: Cannot read property \'c\' of undefined
        return value
    })
).subscribe({
    complete: console.log,
    error: console.log,
    next: console.log
})
ss.next(\'ss\')

setTimeout(() => {
ss.next(2)
}, 2000)

4.完犊子,这里代码我看不懂了,如果subject的订阅是同步的,那为什么宏任务中报错的代码,下一行代码还会继续执行呢?我傻了,,,
http://jsrun.net/pzaKp/edit

以上是关于又开始了rxjs - 与promise的比较的主要内容,如果未能解决你的问题,请参考以下文章

Firebase:firebase.Promise<any> 与 Rxjs Promise<any> 的兼容性

RxJS 序列等价于 promise.then()?

我可以将 async/await Promises 与可观察的 RXJS 混合使用吗?

Promise和RxJS处理异步对比

RxJS Observables 的 Promise.all 行为?

RxJS Promise 组合(传递数据)