JavaScript中的Promise是什么?Promise可以处于哪些状态?

Promise对象表示异步操作的最终完成(或失败)及其结果值。一个常见的使用Promise的例子是从URL获取数据。这将创建一个表示我们期望接收的数据的Promise对象。例如:

fetch('https://my.api.com/items/1')
  .catch(err => console.log(`失败,错误信息:${err}`))
  .then(response => response.json())
  .then(json => console.log(json));

Promise的棘手之处在于理解结果值可能一开始并不可用。相反,Promise可以处于以下三种状态之一:

  • Pending(进行中):初始状态,既未完成也未被拒绝。
  • Fulfilled(已完成):表示操作成功完成。
  • Rejected(已拒绝):表示操作失败。

进行中的Promise可以通过一个值来完成,或者通过一个原因(错误)来拒绝。当其中任何一种情况发生时,相关的处理程序(Promise.prototype.then()Promise.prototype.catch())将被调用。

在上面的例子中,Promise从进行中状态开始,直到从服务器接收到响应。如果在此期间发生任何错误,Promise将被拒绝,并且Promise.prototype.catch()处理程序将将错误记录到控制台。否则,Promise将被完成,并且第一个Promise.prototype.then()处理程序将执行,返回一个新的Promise。新的Promise将被完成,并调用第二个Promise.prototype.then()处理程序,将解析后的JSON数据记录到控制台。