Promise
promise状态:
Pending(进行中)、Fulfilled(已成功)、Rejected(已失败)
promise基本使用:
new Promise((resolve,reject)=>{...})
.then(success=>{...})
.catch(error=>{...})
.finally(()=>{...});
Promise.resolve();
Promise.reject();
Promise.all();
Promise.race();
复制代码
promise需要注意的地方:
1.then(success=>{},error=>{})中的error回调可以捕获reject结果,但是不能捕获success回调函数中的异常,所以我们推荐使用catch()函数捕获reject结果
2.then().then()的调用链中return 新的promise对象会导致执行顺序的改变,如:
const p1 = new Promise((resolve, reject) => {
console.log('promise1');//1
resolve();
})
.then(() => {
console.log('then11');//3
new Promise((resolve, reject) => {
console.log('promise2');//4
resolve();
})
.then(() => {
console.log('then21');//6
})
.then(() => {
console.log('then23');//8
});
})
.then(() => {
console.log('then12');//7
});
const p2 = new Promise((resolve, reject) => {
console.log('promise3');//2
resolve();
}).then(() => {
console.log('then31');//5
});
const p1 = new Promise((resolve, reject) => {
console.log('promise1'); // 1
resolve();
})
.then(() => {
console.log('then11'); // 2
return new Promise((resolve, reject) => {
console.log('promise2'); // 3
resolve();
})
.then(() => {
console.log('then21'); // 4
})
.then(() => {
console.log('then23'); // 5
});
})
.then(() => {
console.log('then12'); //6
});
复制代码
3.promise.then()期望参数是一个函数,如果不是函数就会发生值透传。就算发生了透传,promise.then()中的代码依旧也是会执行的。
参考:
从一道让我失眠的 Promise 面试题开始,深入分析 Promise 实现细节
Promise.any 的作用,如何自己实现一个 Promise.any
Promise.allSettled 的作用,如何自己实现一个 Promise.allSettled
【建议星星】要就来45道Promise面试题一次爽到底(1.1w字用心整理)
Promise不会??看这里!!!史上最通俗易懂的Promise!!!
Promise 被玩出 48 种“花样”,深度解析10个常用模块
-------------------------------------------------------------------------------
[译]JavaScript: Promises 介绍及为何 Async/Await 最终取得胜利
嘿,不要给 async 函数写那么多 try/catch 了
-----------------------------------------------------------------------------------
RxJS——给你如丝一般顺滑的编程体验(篇幅较长,建议收藏)