【发布时间】:2021-04-23 18:27:06
【问题描述】:
我希望 datafx 中的 saveData() 调用不会阻止任何内容,因为没有“等待”,但是当我检查日志和时间戳时,我注意到“主要完成”日志被延迟,即使“检索数据”不是.
async function mainCaller(){
// do something and then trigger call to get data
let id = 13;
let data = await datafx( id ); <-- this gets blocked for saveData() - why?
LOG( `main done` );
}
async function datafx( id ){
// get data
let data = await getData( id );
// cleanup data
// save data but don't wait for it
// datafx does not wait for it as expected
// however, mainCaller() is somehow "delayed" by it based on log timestamps
saveData(id, data );
LOG( `retrieved data` );
return data;
}
async function getData(id){ return await dbRead(id); }
async function saveData(id, data){ return await dbSave(id, data); }
- mainCaller() 中的“await”是否在等待所有异步调用,包括嵌套调用?
- 正确吗?
- 有没有更好的方法来实现嵌套异步调用以避免调用者的延迟?
- 我可以确认“saveData()”调用正在影响我删除它,我看到 mainCaller 在 datafx 返回后立即继续。
【问题讨论】:
-
saveData()return promise 并且你没有等待,所以它打印'main done'
标签: node.js async-await nested nonblocking