Promise详细用法

  • Promise 是JavaScript中用于处理异步操作的对象。它代表了一个尚未完成但预期将来会完成的操作。Promise 有三种状态:
  1. Pending(待定) : 初始状态,既不是成功,也不是失败状态。
  2. Fulfilled(已实现) : 意味着操作成功完成。
  3. Rejected(已拒绝) : 意味着操作失败。

创建 Promise

Promise 是通过其构造器创建的:

let promise = new Promise(function(resolve, reject) {
  // 异步操作的代码

  if (/* 异步操作成功 */) {
    resolve(value); // 如果操作成功,调用 resolve 并传入 value
  } else {
    reject(error); // 如果操作失败,调用 reject 并传入 error
  }
});

resolvereject 是由JavaScript引擎提供的两个函数。当异步操作成功时,你应该调用 resolve(value);当操作失败时,应该调用 reject(error)

消费 Promise

一旦 Promise 被创建,你可以使用 .then(), .catch(), 和 .finally() 方法来处理它。

  • .then() 方法用于设置操作成功时的回调函数。
  • .catch() 方法用于设置操作失败时的回调函数。
  • .finally() 方法用于设置无论操作成功还是失败都会执行的回调函数。
promise
  .then(function(result) {
    // 处理成功情况
  })
  .catch(function(error) {
    // 处理错误情况
  })
  .finally(function() {
    // 总是会执行
  });

链式调用

.then().catch() 方法都会返回一个新的 Promise,允许它们被链式调用:

new Promise((resolve, reject) => {
  setTimeout(() => resolve(1), 1000); // (*)
})
.then(function(result) { // (**)
  console.log(result); // 1
  return result * 2;
})
.then(function(result) { // (***)
  console.log(result); // 2
  return result * 2;
})
.then(function(result) {
  console.log(result); // 4
  return result * 2;
});

在这个例子中,第一个 .then() 处理 (*) 中的 resolve,并在 (**) 中返回新的值。这个值被传递到链中的下一个 .then(),以此类推。

错误处理

如果 .then().catch() 中抛出异常,Promise 将被拒绝,并将错误传递到下一个 .catch()

new Promise((resolve, reject) => {
  throw new Error("错误!");
})
.then(function(result) {
  // 不会被调用
})
.catch(function(error) {
  console.log(error); // Error: 错误!
});

Promise.all

Promise.all 是一个实用函数,用于等待多个 Promise 对象完成:

Promise.all([
  new Promise(resolve => setTimeout(() => resolve(1), 3000)),
  new Promise(resolve => setTimeout(() => resolve(2), 2000)),
  new Promise(resolve => setTimeout(() => resolve(3), 1000))
])
.then(results => {
  console.log(results); // [1, 2, 3] 当所有 promise 完成时,结果是一个数组
});

在上面的示例中,Promise.all 等待所有传递的 Promise 完成,并将它们的结果作为数组返回。

注意事项

  • 如果 Promise.all 中任何一个 Promise 被拒绝,整个 Promise.all 调用会立即被拒绝,不会等待其他 Promise 完成。
  • 使用 Promise 时要确保正确处理错误情况,以避免未捕获的异常。
  • Promise 的链式调用可以帮助你避免回调地狱(Callback Hell),使你的代码更加清晰易读。
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翱翔-蓝天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值