1. 什么是Promise?
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
promise的作用:
- 解决回调地狱,代码易于维护
- 合并多个异步请求
Promise 会有三种状态
- 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled): 意味着操作成功完成。
- 已拒绝(rejected): 意味着操作失败。
状态只能由 Pending –> Fulfilled 或者 Pending –> Rejected,且一但发生改变便不可二次修改;
2. 执行 async 函数,返回的都是 Promise 对象
async function test1() {
return 1
}
async function test2() {
return Promise.resolve(2)
}
const result1 = test1()
const result2 = test2()
console.log("result1:",result1);
console.log("result2:",result2);
复制代码
3. Promise.then成功的情况下,对应的是await
async function test3() {
const p3 = Promise.resolve(3)
p3.then(data=>{
console.log("p3data",data);
})
// 第一种 await 后面是个Promise对象
const data1 = await p3
console.log("data1",data1);
// 第二种 await 后面是个普通的值
const data2 = await 4 // await Promise.resolve(4),自动封装成这样
console.log("data2",data2);
// 第三种 await 后面是个函数,
const data3 = await test1()
console.log("data3",data3);
}
test3()
复制代码
4. Promise.catch异常的情况 对应的是try … catch
async function test4() {
const p4 = Promise.reject(4)
try {
const data4 = await p4
console.log("data4:",data4);
} catch(e) {
console.error("e",e);
}
}
test4()
复制代码
5. Promise的相关api
-
Promise.all
Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例。在all方法中可以传递多个Promise对象,当所有的Promise对象状态都返回fufilled,才会返回fulfilled,否则返回rejected。
const promise1 = new Promise((resolve, reject) => {
resolve();
})
const promise2 = new Promise((resolve, reject) => {
resolve();
})
const promise3 = new Promise((resolve, reject) => {
resolve();
})
const promiseAll = Promise.all([promise1, promise2, promise3]).then(res => {
console.log('all');
})
复制代码
-
Promise.race
Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。可以传递多个Promise对象作为参数,如果实例红有一个实例 率先 改变状态,那么race的状态就会跟着改变。
const promise1 = new Promise((resolve, reject) => {
reject();
})
const promise2 = new Promise((resolve, reject) => {
resolve();
})
const promise3 = new Promise((resolve, reject) => {
reject();
})
const promiseRace = Promise.race([promise1, promise2, promise3]).then(res => {
console.log('race then');
}).catch(error => {
console.log('race catch');
})
复制代码
-
Promise.finally
finally方法用于指定不管Promis对象最后状态如何,都会执行的操作。
new Promise((resolve, reject) => {
resolve();
}).then(res => {
console.log('success');
}).catch(error => {
console.log('error');
}).finally(() =>{
console.log('finally');
})
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END