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