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();
}))
理想情况下,我希望控制台读取:
而是控制台显示
我究竟做错了什么?不确定是否重要或有帮助,但超时背后的想法是模仿sql执行。
您应该更改display
函数,以便仅在setTimeout
执行计划好的函数之后才能解决promise ,例如:
function display(name) {
return new Promise(resolve => {
setTimeout(function () {
console.log("displaying "+name)
returnBody += name + " ";
resolve(1);
}, name + "000");
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句