1. 什么是 Promise
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大,它是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。
2. Promise 的用途
为了解决回调地狱问题
3. Promise 的用法
// 构造函数接收了一个函数作为参数,该函数就是Promise构造函数的回调函数。
// 该函数中有两个参数resolve和reject,这两个参数也分别是两个函数!
new Promise(function (resolve, reject) {
// resolve 表示成功的回调
// reject 表示失败的回调
})
.then(function (res) {
// 成功的函数
})
.catch(function (err) {
// 失败的函数
});
// or
let demo = new Promise((resolve, reject) => {
let number = 10;
setTimeout(() => {
if (number >= 10) {
resolve(number);
} else {
reject(1);
}
}, 1000);
});
demo
.then((res) => {
console.log("成功", res);
})
.catch((err) => {
console.log("失败", err);
});
// Promise.all() 接受多个promise的实例做为参数,参数必须是一个数组。
// promise都执行成功后,返回的是执行后的结果的一个数组,如果有一个失败了,返回的是第一个失败的返回值
let pro1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("pro1 success");
}, 1000);
});
let pro2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("pro2 success");
}, 2000);
});
let pro3 = new Promise((resolve, reject) => {
setTimeout(() => {
reject("pro3 faild");
}, 1000);
});
Promise.all([pro1, pro2]).then((res) => {
console.log(res);
}); // ['pro1 success', 'pro2 success']
Promise.all([pro1, pro3, pro2])
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log("faild", err);
}); // faild pro3 faild
// Promise.race( ) 接受多个promise的实例做为参数,参数必须是一个数组。
// 其中一个promise完成时执行,返回结果是第一个完成的promise的返回数据
Promise.race([pro2, pro1]).then(res => {
console.log(res)
}) // pro2 success