You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
let p = Promise.resolve(21) // Promise.resolve() 返回一个给定值解析后的Promise对象
let p2 = p.then( v => {
return v * 2
})
p2.then(v => {
console.log(v) //输出42
})
上面的例子是比较简单的链式流,考虑一下下面两种情况
在链式调用中,then的回调函数中还存在异步promise,应该怎么传递?
如果在某一个then函数中由reject进行返回,链式还能否传递下去?
下面分别举例进行说明
先来看第一个问题
let p = Promise.resolve(21)
let p2 = p.then( v => {
return new Promise((resolve,reject) => {
resolve(v * 2)
})
})
p2.then(v => {
console.log(v) //输出42
})
最终结果依然输出42,这是因为p2已经又常规的then返回的promise实例更新为then回调中 new Promise()返回的promise实例了,这是promise中存在的机制。
下面来看第二个问题
let p = Promise.resolve(21) // Promise.resolve() 返回一个给定值解析后的Promise对象
let p2 = p.then( v => {
foo.bar() //不存在这一句,故意让出错
return v * 2
})
p2.then(() => {
},(err)=>{
console.log(err) //输出 ReferenceError: foo is not defined
})
可以看到promise链式流的强大,即使某一个环节出错,链式流还是可以继续传递下去。
The text was updated successfully, but these errors were encountered:
同步和异步的区别
事件循环
回调地狱
Promise.all()执行promise队列
Promise.allSettled() ES2020新增特性
在其他地方监听Promise完成
Promise类型检测
具有then方法的鸭子类型检测
用上面的方法进行检测就会被识别为Promise类型,但事实上他只是一个普通对象而已。
Promise.race() 一种称为竞态的高级抽象机制
链式流
The text was updated successfully, but these errors were encountered: