Promise之实例方法与静态方法

Promise 是 JavaScript 中的一个核心概念,用于处理异步操作及其结果。它代表了一个尚未完成但预期将来会完成的异步操作的结果。一个 Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)

一、实例方法

  • .then(onFulfilled, onRejected)then 方法用于指定当 Promise 对象的状态改变时(无论是 fulfilled 还是 rejected),应该执行的操作。它返回一个新的 Promise 实例。onFulfilled 是当 Promise 成功时调用的函数,onRejected 是当 Promise 失败时调用的函数。如果 then 方法中返回的不是一个 Promise,则返回的 Promise 将以返回的值作为结果。
  • .catch(onRejected).catch() 方法是 .then(null, onRejected) 的快捷方式,用于指定发生错误时的回调函数。
  • .finally(onFinally)finally 方法用于指定无论 Promise 对象最后状态如何,都会执行的操作。它不接受任何参数,即不关心 Promise 是成功还是失败。
this.loading = true;
getAiBlackAgentSelect(this.form)
  .then((res) => {
	  //请求成功拿到响应结果
    if (res.code == "200" && res?.list?.list) {
      this.tableData.list = res.list.list;
      this.total = res.list.total;
    }
  })
  .catch((err) => {
	  //请求失败拿到失败结果
    this.$message(err)
  })
  .finally(() => {
	  //请求结束,关闭loading
    this.loading = false;
  });

使用asyncawait关键字

是处理异步操作的语法糖,使异步操作看起来更像是同步代码,便于代码的可读性和维护行。通常是和Promise一起使用,但是awiat只能在async的函数内部使用

  • **async:**通常用于声明一个异步函数,这个函数会隐式的返回一个promise,如果函数正常结束,就会返回resolve,如果函数抛出了异常,就会被reject掉
  • **await:**等待一个async的函数执行结束,并能够接受这个函数返回的结果
this.loading = true;
try {
	//请求成功拿到响应结果
  const res = await getAiBlackAgentSelect(this.form)
  if (res.code == "200" && res?.list?.list) {
    this.tableData.list = res.list.list;
    this.total = res.list.total;
  }
} catch (error) {
	//请求失败拿到失败结果
  this.$message(error)
}
//请求结束,关闭loading
this.loading = false;

二、静态方法

  1. Promise.all()

它会等待所有的 Promise 实例都完成(或第一个失败),然后返回一个新的 Promise。如果所有的 Promise 都成功了,那么返回值是一个包含所有 Promise 结果的数组。如果有任何一个 Promise 失败了,那么整个 Promise.all() 就会立即失败,并返回第一个失败的 Promise 的错误信息。

Promise.all([promise1, promise2, promise3])
  .then(results => {
    console.log(results); // [result1, result2, result3]
  })
  .catch(error => {
    console.error(error);
  });
  1. Promise.allSettled()

这个方法与 Promise.all() 类似,但它会等待所有的 Promise 实例都完成(无论是成功还是失败),然后返回一个新的 Promise。返回值是一个数组,每个元素对应一个输入的 Promise 的结果,包含状态(fulfilled 或 rejected)和值(或错误)。这个方法特别适用于你希望处理一组 Promise,而不管其中是否有失败的情况。

Promise.allSettled([promise1, promise2, promise3])
  .then(results => {
    results.forEach(result => {
      if (result.status === 'fulfilled') {
        console.log('Promise fulfilled:', result.value);
      } else {
        console.log('Promise rejected:', result.reason);
      }
    });
  });
  1. Promise.any()

这个方法接受一组 Promise 实例作为参数,并返回一个新的 Promise。只要其中的一个 Promise 成功,就会立即返回那个已经成功的 Promise 的值。如果所有 Promise 都失败,则返回一个带有 AggregateError 的拒绝 Promise。这个方法特别适用于你只需要一个 Promise 成功的场景,比如从多个源获取数据,只要有一个成功就可以。

Promise.any([promise1, promise2, promise3])
  .then(result => {
    console.log('First fulfilled promise:', result);
  })
  .catch(error => {
    console.log('All promises were rejected:', error);
  });
  1. Promise.race()

这个方法接受一组 Promise 实例作为参数,并返回一个新的 Promise。它会返回第一个完成(无论是成功还是失败)的 Promise 的结果或错误。这个方法特别适用于你想要知道哪个 Promise 最先完成的场景,比如比较多个异步操作的速度。

Promise.race([promise1, promise2, promise3])
  .then(result => {
    console.log('First settled promise:', result);
  })
  .catch(error => {
    console.log('First rejected promise:', error);
  });

这四种静态方法各有其特点和适用场景:

  • Promise.all()适用于需要所有 Promise 都成功的情况,如多个并行操作都必须成功才能继续。
  • Promise.allSettled()适用于需要等待所有 Promise 完成但不在意是否全部成功的情况,如批量操作中想知道每个操作的结果。
  • Promise.any()适用于只需要一个 Promise 成功的情况,如从多个数据源中获取数据,只要有一个成功即可。
  • Promise.race()适用于需要知道哪个 Promise 最先完成(无论成功还是失败)的情况,如设置超时或比较多个异步操作的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值