Node.js async函数中使用map返回Promise { <pending> } 如何解决
问题原因
- 你没有等待
this.entityRepository.findAll()的异步执行结果就提前返回了resultModules,此时变量还未完成赋值 Array.map中传入async函数时,返回的数组每个元素都是Promise实例,必须通过Promise.all批量等待所有Promise完成,才能拿到最终的业务数据
修复方案
既然方法本身已经声明为async,直接用await语法替代then回调逻辑更简洁,在map得到Promise数组后包裹Promise.all等待所有内部异步查询完成。
完整修复代码
public async execute(): Promise<any> { // 等待第一步异步查询拿到数组X const res = await this.entityRepository.findAll(); // map生成Promise数组后,用Promise.all等待所有子异步任务完成 const resultModules = await Promise.all( res.map(async seg => { const modules = await this.segmentModuleRepository.findBySegmentFormatted(seg.id); console.log('modules: ', modules); return { ...seg, modules, }; }) ); console.log('resultModules', resultModules); return resultModules; }
内容的提问来源于stack exchange,提问作者Eduardo Fellipe
相关产品推荐
相关产品推荐

