Promise有哪些常用的方法?

简介: Promise有哪些常用的方法?

除了前面提到的then()catch()Promise.all()Promise.race()之外,Promise还有以下一些常用方法:

Promise.resolve()

  • 功能:创建一个状态为Fulfilled的Promise实例,并将传递的值作为Promise的成功结果。如果传递的值本身就是一个Promise,那么它会直接返回这个Promise;如果传递的值是一个具有then方法的对象,它会将这个对象“promisify”,即转化为一个Promise。
  • 示例
const resolvedPromise = Promise.resolve('成功的值');
resolvedPromise.then((value) => {
   
  console.log(value); // 输出:成功的值
});

// 如果传入一个Promise
const existingPromise = new Promise((resolve) => setTimeout(() => resolve('已存在的Promise的值'), 1000));
const newPromise = Promise.resolve(existingPromise);
newPromise.then((value) => {
   
  console.log(value); // 输出:已存在的Promise的值
});

Promise.reject()

  • 功能:创建一个状态为Rejected的Promise实例,传递的值会作为Promise被拒绝的原因。
  • 示例
    const rejectedPromise = Promise.reject(new Error('操作失败'));
    rejectedPromise.catch((error) => {
         
    console.log(error.message); // 输出:操作失败
    });
    

Promise.allSettled()

  • 功能:接受一个Promise数组作为参数,当所有的Promise都已经敲定(settled),即每个Promise都已经变为FulfilledRejected状态时,它才会返回。返回的Promise的结果是一个包含每个Promise结果的对象数组,每个对象包含status(状态)和value(成功的值)或reason(失败的原因)属性。
  • 示例
const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve, reject) => setTimeout(() => reject(new Error('失败原因')), 2000));
const promise3 = Promise.resolve(3);

Promise.allSettled([promise1, promise2, promise3]).then((results) => {
   
  console.log(results);
  // 输出:
  // [
  //   { status: 'fulfilled', value: 1 },
  //   { status: 'rejected', reason: Error: 失败原因 },
  //   { status: 'fulfilled', value: 3 }
  // ]
});

Promise.any()

  • 功能:接受一个Promise数组,只要数组中的任何一个Promise变为Fulfilled状态,它就会返回这个Promise的成功结果。如果所有的Promise都被Rejected,它会返回一个AggregateError,包含所有被拒绝的原因。
  • 示例
const promise1 = new Promise((resolve) => setTimeout(() => resolve('结果1'), 3000));
const promise2 = new Promise((resolve) => setTimeout(() => resolve('结果2'), 1000));
const promise3 = new Promise((resolve) => setTimeout(() => resolve('结果3'), 2000));

Promise.any([promise1, promise2, promise3]).then((result) => {
   
  console.log(result); // 输出:结果2
});

finally()

  • 功能:无论Promise的最终状态是Fulfilled还是Rejectedfinally()方法中的回调函数都会被执行。它通常用于执行一些清理操作,比如关闭文件、释放资源等。
  • 示例
const myPromise = new Promise((resolve, reject) => {
   
  setTimeout(() => {
   
    const success = true;
    if (success) {
   
      resolve('操作成功');
    } else {
   
      reject('操作失败');
    }
  }, 2000);
});

myPromise.then((result) => {
   
  console.log(result);
}).catch((error) => {
   
  console.log(error);
}).finally(() => {
   
  console.log('无论成功失败,我都会执行');
});
相关文章
|
4月前
|
前端开发
在什么场景下适合使用 Promise.race() 方法?
在什么场景下适合使用 Promise.race() 方法?
243 68
|
4月前
|
前端开发
如何使用 Promise 的 all 方法?
如何使用 Promise 的 all 方法?
454 63
|
4月前
|
前端开发
如何使用 Promise 的 race 方法?
如何使用 Promise 的 race 方法?
248 62
|
10月前
|
存储 前端开发
除了 Promise.all(),还有哪些方法可以处理异步并发操作?
在上述示例中,`concurrentPromises` 函数接受一个Promise数组和最大并发数作为参数,通过手动控制并发执行的Promise数量,实现了对异步操作的并发控制,并在所有Promise完成后返回结果数组。
|
10月前
|
前端开发 索引
Promise.all() 方法的参数可以是什么类型?
综上所述,`Promise.all()` 方法的参数类型较为灵活,但无论使用哪种类型的可迭代对象作为参数,其核心的异步操作处理逻辑和成功失败的判断机制都是一致的,都是为了方便地处理多个异步操作的并发执行和结果汇总。
|
7月前
|
前端开发
在Promise链中,如果前面的catch方法没有捕获到错误,后面的catch方法还会执行吗?
在Promise链中,如果前面的catch方法没有捕获到错误,后面的catch方法还会执行吗?
175 58
|
7月前
|
前端开发
在Promise链中是否可以多次使用catch方法?
在Promise链中是否可以多次使用catch方法?
196 58
|
7月前
|
前端开发
如何在不使用catch方法的情况下处理Promise.reject()抛出的错误?
如何在不使用catch方法的情况下处理Promise.reject()抛出的错误?
270 57
|
8月前
|
前端开发 JavaScript
除了使用Polyfill,还有其他解决Promise.allSettled()兼容性问题的方法吗?
除了使用Polyfill,还有其他解决Promise.allSettled()兼容性问题的方法吗?
220 81
|
8月前
|
前端开发 JavaScript
Promise.allSettled()方法的语法是什么?
Promise.allSettled()方法的语法是什么?
275 79

热门文章

最新文章