Promise的构造函数

175 阅读2分钟

Promise的构造函数

Promise 是 JavaScript 中用于处理异步操作的对象。它的构造函数用于创建一个新的 Promise 实例,并接受一个执行器函数(executor function)作为参数。以下是 Promise 构造函数的详细解析和使用方法。

1. Promise 构造函数的基本语法

new Promise(executor);
  • executor:一个函数,接受两个参数 resolvereject,分别用于将 Promise 的状态从 pending(等待) 转换为 fulfilled(已成功)rejected(已失败)

2. 参数说明

(1) resolve 函数

  • 作用:将 Promise 的状态从 pending 转换为 fulfilled,并传递结果值。
resolve(value);
  • value:传递给 then 方法的成功回调的值。

(2) reject 函数

  • 作用:将 Promise 的状态从 pending 转换为 rejected,并传递错误原因。

  • 语法

reject(reason);
  • reason:传递给 catch 方法或 then 的失败回调的错误原因。

3. 使用示例

(1) 基本用法

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    const success = true;
    if (success) {
      resolve('Operation succeeded!');
    } else {
      reject('Operation failed!');
    }
  }, 1000);
});

promise
  .then((result) => {
    console.log(result); // 输出: "Operation succeeded!"
  })
  .catch((error) => {
    console.error(error); // 输出: "Operation failed!"
  });

(2) 链式调用

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

(3) 错误处理

new Promise((resolve, reject) => {
  setTimeout(() => reject(new Error('Something went wrong!')), 1000);
})
  .then((result) => {
    console.log(result);
  })
  .catch((error) => {
    console.error(error.message); // 输出: "Something went wrong!"
  });

4. Promise 的状态

  • pending(等待):初始状态,既不是成功也不是失败。

  • fulfilled(已成功):操作成功完成,调用 resolve

  • rejected(已失败):操作失败,调用 reject

5. 注意事项

  1. 立即执行executor 函数在 Promise 构造函数调用时立即执行。

  2. 不可逆Promise 的状态一旦从 pending 转换为 fulfilledrejected,就不能再改变。

  3. 错误处理:未捕获的 reject 会导致未处理的 Promise 错误,建议始终使用 .catchtry/catch(在 async/await 中)。

总结

  • Promise 构造函数:用于创建 Promise 实例,接受一个 executor 函数。

  • resolvereject:用于改变 Promise 的状态并传递结果或错误。

  • 链式调用:通过 .then.catch 处理成功和失败的结果。

Promise 是处理异步操作的核心工具,结合 async/await 可以编写更简洁、易读的异步代码。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github