返回

promise — 做个讲信用的异步编程公民!

前端

异步编程

异步编程是一种编程范式,它允许一个程序在等待另一个程序的结果时继续执行。这是通过将长时间运行的操作放在一个单独的线程中来实现的,这样主程序就可以继续运行而不必等待操作完成。

Promise

Promise 是一个 JavaScript 对象,代表一个异步操作。它有三个状态:

  • pending(进行中):这是初始状态,表示操作还没有完成。
  • fulfilled(已成功):表示操作已经成功完成,并且有一个结果。
  • rejected(已失败):表示操作已经失败,并且有一个错误。

Promise 的状态是不可变的,这意味着一旦它进入某种状态,它就不能再改变。

状态变更

Promise 的状态可以从 pending 变为 fulfilled 或 rejected。这可以通过调用 Promise 的 resolve() 或 reject() 方法来实现。

  • resolve() 方法将 Promise 的状态从 pending 变为 fulfilled,并传入一个结果值。
  • reject() 方法将 Promise 的状态从 pending 变为 rejected,并传入一个错误值。

使用 Promise

我们可以使用 Promise 来编写异步代码。以下是使用 Promise 的一个示例:

function makeRequest() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (Math.random() > 0.5) {
        resolve("成功!");
      } else {
        reject(new Error("失败!"));
      }
    }, 1000);
  });
}

makeRequest()
  .then(result => {
    console.log(result);
  })
  .catch(error => {
    console.log(error);
  });

这段代码创建一个 Promise,并使用 setTimeout() 方法模拟一个异步操作。然后,它使用 then() 方法来处理 Promise 的结果。如果 Promise 成功,则调用 then() 方法的第一个参数(一个回调函数),并将结果传递给该回调函数。如果 Promise 失败,则调用 then() 方法的第二个参数(另一个回调函数),并将错误传递给该回调函数。

Promise 的优点

使用 Promise 有很多优点,包括:

  • 使得异步编程更加容易。
  • 能够更好地控制异步代码的执行顺序。
  • 避免回调地狱。

Promise 的缺点

使用 Promise 也有一些缺点,包括:

  • 增加了代码的复杂性。
  • 可能导致难以调试的错误。

总结

Promise 是一个强大的工具,可以让我们更容易编写异步代码。但是,在使用 Promise 时也需要注意它的缺点。