标签:return 实现 request nodejs something san turn 堆栈 返回
Async/await 在 NodeJS 7.6 引入,当前已被所有现代浏览器支持。
promise
的方式。当我们用 promise 实现异步时
const makeRequest = () =>
getJSON()
.then(data => {
console.log(data)
return "done"
})
makeRequest()
当我们用 async/await 实现时
const makeRequest = async () => {
console.log(await getJSON())
return "done"
}
makeRequest()
await
关键字只能用于 async
关键字的方法内,代码简洁直观,我们不用使用 then 关键字,创建匿名函数处理返回,避免了嵌套代码。
错误处理,async/await 让我们可以将同步和异步代码的错误放在一块处理,不需要再传递错误处理函数。
控制流,当我们考虑 then 中直接返回数据,或者根据数据的值,发起进一步处理,再返回数据时,极易容易在多层嵌套中迷失。
Promise :
const makeRequest = () => {
return getJSON()
.then(data => {
if (data.needsAnotherRequest) {
return makeAnotherRequest(data)
.then(moreData => {
console.log(moreData)
return moreData
})
} else {
console.log(data)
return data
}
})
}
Async/await
const makeRequest = async () => {
const data = await getJSON()
if (data.needsAnotherRequest) {
const moreData = await makeAnotherRequest(data);
console.log(moreData)
return moreData
} else {
console.log(data)
return data
}
}
中间值,不用再 then 式调用中传递中间值到最后一个 then
const makeRequest = () => {
return promise1()
.then(value1 => {
// do something
return Promise.all([value1, promise2(value1)])
})
.then(([value1, value2]) => {
// do something
return promise3(value1, value2)
})
}
const makeRequest = async () => {
const value1 = await promise1()
const value2 = await promise2(value1)
return promise3(value1, value2)
}
错误堆栈,当链式 then 时,捕捉到的异常很难判断是哪一个 then 抛出
在调试打断点是更为方便
标签:return 实现 request nodejs something san turn 堆栈 返回
原文地址:https://www.cnblogs.com/pengwf/p/13347685.html