【发布时间】:2020-07-04 02:23:12
【问题描述】:
app.get('/testAsync', asyncHandler(async function (req, res,next) {
//res.send('We test async here')
async function display(name) {
setTimeout(function () {
console.log("displaying "+name)
returnBody += name + " ";
return 1
}, name + "000");
}
async function send()
{
console.log("sending "+returnBody)
res.send(returnBody)
//returnBody="";
console.log('all done!')
return 'alldone';
}
const getInfo = async () => {
// failed attemp 1
// display("1")
// display("2")
// display("3")
// display("4")
// display("5")
//failed attempt 2
// display(1).then(
// display(2)).then(
// display(3)).then(
// send()
// )
//failed attempt 3
// await display(1)
// await display(2);
// await display(3);
send(await display(1),await display(2),await display(3));
//await send(display1,display2,display3)
}
await getInfo();
}))
理想情况下,我希望我的控制台能够读取:
- 显示 1
- 显示 2
- 显示 3
- 发送中
- 全部完成!
控制台正在显示
- 发送中
- 全部完成!
- 显示 1
- 显示 2
- 显示 3
我做错了什么?不确定它是否重要或有帮助,但超时背后的想法是模仿 sql 执行。
【问题讨论】:
-
你需要在超时结束后解决
display函数返回的promise。将display函数从async更改为返回新承诺的常规函数,该承诺在特定秒数后解决。
标签: node.js asynchronous promise async-await