📅  最后修改于: 2023-12-03 15:17:56.663000             🧑  作者: Mango
Node.js 是一个基于事件驱动、非阻塞 I/O 的平台,开发者经常会使用回调函数进行异步编程。然而回调地狱(Callback Hell)使代码可读性和可维护性变差。Promise 和 async/await 是一些解决回调地狱的方式。
Promise 是 ECMAScript 6 中的一种异步编程的解决方案。它可以避免回调地狱,链式调用更加优雅。
// Promise示例
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
}, 1000)
})
}
getData()
.then(result => {
console.log(result) // success
})
.catch(error => {
console.log(error)
})
Promise 有三种状态:pending、fulfilled、rejected。当状态从 pending 转变为 fulfilled 或 rejected 时,称为 settled。
优点:
缺点:
async/await 是建立在 Promise 上的一种异步编程方式,它可以减少 Promise 冗长的代码和难懂的语法结构。
// async/await 示例
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
}, 1000)
})
}
async function test() {
const result = await getData()
console.log(result) // success
}
test()
优点:
缺点:
Promise 和 async/await 都是解决回调地狱问题的方式。使用 async/await 可以让你的代码简洁、易读和可维护,但需要注意一些使用限制。而 Promise 则可以更加灵活地处理异步操作完成或失败后的结果。根据实际需要,在两种方式中选择适合自己的。