1. Promise 的用途
- Promise 是一个异步操作返回的对象,用来传递异步操作的。
- 用途:解决回调地狱更好维护代码、合并多个异步请求节约时间。
Promise 有三种状态:
- Pending ———— Promise 对象实例创建时的初始态;
- Fulfilled/Resolve ———— 成功时的状态;
- Rejected ———— 失败时的状态。
2. Promise 具体用法
- 先 return new Promise((resolve,reject)=>{...})
- 任务成功调用 resolve(result);失败调用 reject(error)
- 接着使用 .then(success1, fail1) 传入成功和失败后执行的函数
- resolve 和 reject 会对应调用 success1 和 fail1 这两个函数。
function fn(){
return new Promise((resolve, reject)=>{
resolve(result)
reject(error)
})
}
fn().then(success1, fail1)
3. 如何使用 Promise.all() ?
- Promise.all() 将多个 Promise 实例包装成一个新的 Promise实例。
- 它接收一个数组,数组内是 Promise 实例,全部实例成功才会调用 success1 并返回一个数组;只要有一个失败,就调用 fail1 返回最先失败的值。
Promise.all([promise1, promise2]).then(success1, fail1)
4. 如何使用 Promise.race() ?
- Promise.race() 将多个 Promise 实例包装成一个新的 Promise 实例。
- 它接收一个数组,数组内是 Promise实例,最早返回的结果是成功,那就调用 success1;最早返回的结果是失败,那就调用 fail1 。
- 如果实例都失败或都成功,一样是返回最早得到的值。
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'one');
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then((value) => {
console.log(value);
});