JavaScript 中的 Promise
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
Promise代表异步操作的状态。这个异步操作可以是任何事情,例如从 API 获取数据、从文件读取内容等等。
在 Promise 出现之前,我们使用回调函数,但回调函数功能有限,而且容易导致代码混乱。当需要处理多个回调函数时,代码就会陷入回调地狱,难以维护。
Javascript Promise 由四种状态组成:
- 已完成:手术已成功完成。
- 待处理:操作尚未完成,仍在进行中。
- 操作失败:操作已拒绝。
- 已解决:操作要么完成,要么被拒绝。
可以使用构造函数创建 Promise Promise。
const isNumEven = (num) => new Promise((resolve, reject)=> {
if(num % 2 === 0) {
resolve(true)
} else {
reject(false)
}
})
现在,上述创建的承诺可以用作
isNumEven(5)
.then(res => console.log(res))
.catch(err => console.log(err))
then当 Promise 被实现时会调用处理程序,而当catchPromise 被拒绝时会调用处理程序。
在这种情况下,catch由于我们传递给函数的数字不是偶数,因此会调用处理程序。
连锁承诺
当一个承诺的结果又是另一个承诺时,我们需要将它们串联起来才能得到结果。
isNumPrime(5)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.log(err))
这种处理异步操作的方法在只有两三个 Promise 时看起来不错,但当 Promise 数量更多时就难以管理了。这时,async awaitPromise 就派上用场了。它们可以帮助你轻松处理多个 Promise。
今天就到这里。感谢您读到最后。如果您对本文有任何反馈或建议,请告诉我。另外,如果您希望我撰写其他主题的文章,也请告诉我async await。