多层循环中出现await仅在async函数中有效错误该如何解决
错误原因
await 关键字仅允许在标记为 async 的函数内部使用,你代码中 forEach 传入的回调是普通同步函数,因此在回调内部调用 await 会触发语法报错。
解决方案
方案1:使用 for...of 循环(串行执行,推荐)
直接替换 forEach 为 for...of 循环,不需要额外嵌套回调,所有逻辑在外层的 async 函数作用域内执行,会按顺序逐个执行异步查询,适合需要控制执行顺序、避免数据库并发压力过大的场景。
修改后代码:
async function myfunc(fruits) { for (i = 0; i < 5; i++) { for (const fruitId of fruits) { const colors = await dbHelper.getColor(fruitId); for (const color of colors) { const taste = await dbHelper.gettaste(color); // 此处补充你处理 taste 的业务逻辑 } } } }
方案2:使用 Promise.all + 异步回调(并行执行)
如果你不需要保证查询顺序,想要提升执行效率,可以给回调函数加上 async 标记,同时用 Promise.all 等待同批次所有异步任务执行完成:
修改后代码:
async function myfunc(fruits) { for (i = 0; i < 5; i++) { await Promise.all(fruits.map(async fruitId => { const colors = await dbHelper.getColor(fruitId); await Promise.all(colors.map(async color => { const taste = await dbHelper.gettaste(color); // 此处补充你处理 taste 的业务逻辑 })); })); } }
注意:该方案会同批次触发所有数据库查询,高并发场景下可能给数据库带来过大压力,需要根据实际业务情况选择。
内容的提问来源于stack exchange,提问作者MDL
相关产品推荐
相关产品推荐

