发布于 2026-01-06 2 阅读
0

JavaScript 中的 Promises DEV 的全球展示挑战赛由 Mux 呈现:展示你的项目!

JavaScript 中的 Promise

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

Promise代表异步操作的状态。这个异步操作可以是任何事情,例如从 API 获取数据、从文件读取内容等等

在 Promise 出现之前,我们使用回调函数,但回调函数功能有限,而且容易导致代码混乱。当需要处理多个回调函数时,代码就会陷入回调地狱,难以维护。

Javascript Promise 由四种状态组成:

  1. 已完成:手术已成功完成。
  2. 待处理:操作尚未完成,仍在进行中。
  3. 操作失败:操作已拒绝。
  4. 已解决:操作要么完成,要么被拒绝。

可以使用构造函数创建 Promise
Promise

const isNumEven = (num) => new Promise((resolve, reject)=> {
  if(num % 2 === 0) {
    resolve(true)
  } else {
    reject(false)
  }
})
Enter fullscreen mode Exit fullscreen mode

现在,上述创建的承诺可以用作

isNumEven(5)
  .then(res => console.log(res))
  .catch(err => console.log(err))          
Enter fullscreen mode Exit fullscreen mode

then当 Promise 被实现时会调用处理程序,而catchPromise 被拒绝时会调用处理程序。

在这种情况下,catch由于我们传递给函数的数字不是偶数,因此会调用处理程序。

连锁承诺

当一个承诺的结果又是另一个承诺时,我们需要将它们串联起来才能得到结果。

isNumPrime(5)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.log(err))           
Enter fullscreen mode Exit fullscreen mode

这种处理异步操作的方法在只有两三个 Promise 时看起来不错,但当 Promise 数量更多时就难以管理了。这时,async awaitPromise 就派上用场了。它们可以帮助你轻松处理多个 Promise。

今天就到这里。感谢您读到最后。如果您对本文有任何反馈或建议,请告诉我。另外,如果您希望我撰写其他主题的文章,也请告诉我async await

文章来源:https://dev.to/deepansh946/promises-in-javascript-1nbp