Promise
Promise
Promise 是异步操作的一种解决方案
什么时候使用 Promise?
Promise 一般用来解决层层嵌套的回调函数(回调地狱 callback hell)的问题
基本用法
Promise 解决的不是回调函数,而是回调地狱。
const p = new Promise((resolve, reject) => {
//Promise有3种状态,一开始是pending(未完成),执行resolve,变成fulfilled(resolved),已成功
//Promise的状态一旦变化,就不会再改变了
//pending->fulfilled
resolve();
//pending->rejected
reject();
});
p.then(
(data) => {
console.log("sucess", data);
},
(err) => {
console.log("error", err);
}
);
基本使用
- new Promise 实例,而且要 return
- new Promise 时要传入函数,函数有 resolve reject 两个参数
- 成功时执行 resolve() 失败时执行 reject()
- then 监听结果
实例方法
//当Promise状态发生变化时,不论如何变化都会执行,不变化不执行
new Promise((resolve, reject) => {
reject("reason");
})
.finally((data) => {
console.log(data);
})
.catch((err) => {});
then()
1.什么时候执行
pending->fulfilled 时,执行 then 的第一个回调函数
pending->rejected 时,执行 then 的第二个回调函数
2.执行后的返回值
then 方法执行后返回一个新的 Promise 对象
3.then 方法返回的 Promise 对象的状态改变
Promise.all
// Promise.all接收一个promise对象的数组
// 待全部完成之后,统一执行success
Promise.all([result1, result2]).then(datas => {
// 接收到的datas是一个数组,依次包含了多个promise返回的内容
console.log(datas[0])
console.log(datas[1])
})
Promise.race
// Promise.race接收一个包含多个promise对象的数组
// 只要有一个完成,就执行success
Promise.race([result1, result2]).then(data => {
// data即最先执行完成的promise的返回值
console.log(data)
})
应用
使用 Promise 实现红绿灯
function light(color, delay) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(color);
resolve();
}, delay);
});
}
function step() {
light("red", 3000)
.then(() => {
return light("yellow", 1000);
})
.then(() => {
return light("green", 3000);
})
.then(() => {
return step();
});
}
step();