JavaScript Promise 详解

Promise 是 JavaScript 中用于异步编程的一种对象。它代表了一个异步操作的最终完成(或失败)及其结果值。

特点

  • 状态:一个 Promise 对象代表了一个异步操作,它有三种状态:

    • Pending(进行中):初始状态,既不是成功,也不是失败状态。
    • Fulfilled(已成功):意味着操作成功完成。
    • Rejected(已失败):意味着操作失败。
  • 一次性Promise 对象的状态一旦改变,就不会再变,任何时候都可以得到这个结果。

  • 微任务Promise 的回调函数是在当前执行栈清空后的微任务中执行,不会阻塞代码的执行。

构造函数

Promise 对象是一个构造函数,可以用来创建 Promise 实例。

语法

new Promise(executor)

参数

  • executor:一个执行器函数,它将在 Promise 创建后立即执行。它接受两个参数,通常命名为 resolvereject
    • resolve:当异步操作成功时调用,并且返回操作的结果。
    • reject:当异步操作失败时调用,并且返回操作的错误。

示例

const myPromise = new Promise((resolve, reject) => {
  // 异步操作
  const value = "Hello, Promise!";
  if (typeof value === "string") {
    resolve(value);
  } else {
    reject("Value is not a string!");
  }
});

方法

.then()

用于指定 Promise 状态为 fulfilled 时的回调函数。

语法

promise.then(onFulfilled, onRejected)

参数

  • onFulfilled:当 Promise 成功时调用的函数。
  • onRejected:当 Promise 失败时调用的函数(可选)。

示例

myPromise.then((value) => {
  console.log(value); // "Hello, Promise!"
}, (error) => {
  console.error(error); // "Value is not a string!"
});

.catch()

用于指定 Promise 状态为 rejected 时的回调函数。

语法

promise.catch(onRejected)

参数

  • onRejected:当 Promise 失败时调用的函数。

示例

myPromise.catch((error) => {
  console.error(error); // "Value is not a string!"
});

.finally()

用于指定 Promise 状态无论成功还是失败时都会执行的回调函数。

语法

promise.finally(onFinally)

参数

  • onFinally:无论 Promise 成功还是失败都会调用的函数。

示例

myPromise.finally(() => {
  console.log("The promise is settled, regardless of the outcome.");
});

链式调用

Promise.then().catch() 方法都返回一个新的 Promise 对象,这使得可以进行链式调用。

示例

fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .then(data => console.log(data))
  .catch(error => console.error('There was a problem with the fetch operation:', error));

在这个例子中,fetch 返回一个 Promise 对象,它在成功时解析为 JSON,如果任何步骤失败,错误将被 catch 捕获。

静态方法

Promise.all()

接受一个 Promise 对象的数组作为参数,只有当所有 Promise 对象都成功时,才会触发 .then() 回调函数。

语法

Promise.all(promises)

参数

  • promises:一个 Promise 对象的数组。

示例

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values); // [result1, result2, result3]
});

Promise.race()

接受一个 Promise 对象的数组作为参数,只要有一个 Promise 对象成功或失败,就立即触发 .then().catch() 回调函数。

语法

Promise.race(promises)

参数

  • promises:一个 Promise 对象的数组。

示例

Promise.race([promise1, promise2, promise3]).then((value) => {
  console.log(value); // The first promise to settle (either fulfilled or rejected)
});

Promise 对象为 JavaScript 异步编程提供了一种更加清晰和灵活的方式来处理异步操作,使得代码更加易于理解和维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值