我对Promise的一些了解

178 阅读1分钟

1. Promise 的用途

  • Promise 是一个异步操作返回的对象,用来传递异步操作的。
  • 用途:解决回调地狱更好维护代码、合并多个异步请求节约时间。

Promise 有三种状态:

  1. Pending ———— Promise 对象实例创建时的初始态;
  2. Fulfilled/Resolve ———— 成功时的状态;
  3. 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);
  // Both resolve, but promise2 is faster
});
// expected output: "two"