如何使用Async函数循环遍历id数组并按id获取数据存入数组
问题原因
Array.map传入async函数时,返回值是Promise对象组成的数组,而非直接的查询结果数组,未等待Promise resolve就直接打印自然拿不到实际数据。- 你在每个map回调内部单独定义了
variables数组,每个回调仅会返回长度为1的单元素数组,不符合整合所有结果到同一数组的需求。
正确实现
你需要借助Promise.all等待所有异步查询完成,且逻辑需要放在async函数上下文中执行:
async function fetchAllVariables(dVariables) { // 生成所有查询请求的Promise数组 const queryPromises = dVariables.map(id => vModel.findById(id)) // 等待所有查询完成,按原id顺序返回结果数组 const variables = await Promise.all(queryPromises) console.log('最终结果:', variables) return variables } // 顶层调用示例(如果是在其他async函数内调用直接await即可) ;(async () => { const result = await fetchAllVariables(dVariables) // 后续业务逻辑写在这里 })()
可选错误处理
如果需要避免单个查询失败导致整个流程中断,可以对单个查询做异常捕获:
async function fetchAllVariables(dVariables) { const queryPromises = dVariables.map(async id => { try { return await vModel.findById(id) } catch (err) { console.error(`id为${id}的变量查询失败:`, err) return null } }) // 等待所有查询完成后过滤掉失败的null值 const variables = (await Promise.all(queryPromises)).filter(Boolean) return variables }
内容的提问来源于stack exchange,提问作者Dev M
相关产品推荐
相关产品推荐

