Promise详解

一、什么是 Promise?

Promise 是 ES6 引入的一种异步编程解决方案,用于避免「回调地狱」问题。它表示一个可能还未完成但将来会完成的操作,其主要作用是用于异步操作的结果管理。

二、Promise 的三种状态

  1. pending(进行中):初始状态。

  2. fulfilled(已成功):操作成功完成,并返回一个结果。

  3. rejected(已失败):操作失败,并返回一个原因(错误信息)。

状态一旦变更,就不可再改变(不可逆)。

三、Promise 基本语法

const promise = new Promise((resolve, reject) => {
  // 异步操作
  if (成功) {
    resolve(value); // 变为 fulfilled 状态
  } else {
    reject(reason); // 变为 rejected 状态
  }
});

四、常用方法详解

(一).then() 处理成功或失败(注册两个回调)。

 myPromise.then( onFulfilled, // (value) => { ... } 成功时的处理函数,接收决议值 
onRejected // (reason) => { ... } 失败时的处理函数(可选),接收拒绝原因 );

一般来说用.catch代替onRejected函数,.catch放在链式调用末尾,捕获前面任何一个 then 或 executor 中的错误
1 可以只传 onFulfilled,或只传 onRejected(但通常用 .catch 更好)。
返回新 Promise: .then 方法总是返回一个新的 Promise!这是链式调用的基础。
3 如果处理函数返回一个,新 Promise 以该值 resolve
4 如果处理函数返回另一个 Promise,新 Promise 会“跟随”那个 Promise 的状态和值。
5 如果处理函数抛出错误,新 Promise 以该错误信息reject

(二).catch(): 

专门处理拒绝状态(相当于 .then(null, onRejected))。最佳实践: 用于集中处理链中发生的任何错误。

(三).finally() 

无论成功或失败最终都会执行的回调。不接收参数,通常用于清理工作(如隐藏加载指示器)。

myPromise .then(result =>{
 ... }) .catch(error =>{ 
... }) .finally(() =>{ 
console.log('Operation completed (success or failure).'); // 清理操作 });

(四)Promise.all(iterable)

作用: 接收一个 Promise 对象集合(如数组),当所有 Promise 都成功解决时,返回一个包含所有成功结果的数组(顺序与输入一致)。如果任何一个 Promise 被拒绝,则立即以该拒绝原因拒绝返回的 Promise。
用例: 并行执行多个独立的异步操作,并需要等待所有结果才能继续(如同时加载多个资源)。

(五)Promise.allSettled(iterable) 

作用: (ES2020) 接收一个 Promise 对象集合,等待所有 Promise 都敲定(settled,即 fulfilled 或 rejected)。返回一个数组,每个元素是一个对象,描述对应 Promise 的结果 { status: 'fulfilled', value: ... } 或 { status: 'rejected', reason: ... }
用例: 无论单个成功或失败,都需要知道所有异步操作最终结果时(如批量提交表单,需要报告每个提交的状态)。 

(六) Promise.race(iterable)


作用: 接收一个 Promise 对象集合,返回一个新的 Promise。这个新 Promise 会采纳第一个敲定(settled)的 Promise(无论成功或失败)的状态和结果/原因
用例: 设置超时、竞速(取最快响应的结果)。

(七)Promise.any(iterable)

作用: 接收一个可迭代对象(通常是 Promise 对象组成的数组)。它返回一个新的 Promise

  1. 等待第一个成功: 它会等待传入的 Promise 中任何一个率先成功解决(fulfilled。一旦有第一个 Promise 成功,Promise.any() 返回的 Promise 会立即以这个成功 Promise 的结果值解决(resolve

  2. 处理全部失败: 如果传入的所有 Promise 都被拒绝(rejected,那么 Promise.any() 返回的 Promise 会以一个特殊的 AggregateError 对象被拒绝(reject。这个 AggregateError 对象有一个 .errors 属性,它是一个数组,包含了所有传入 Promise 的拒绝原因(rejection reasons)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值