我正在尝试连接到 Snowflake DB,但程序没有等待连接 function 完成,尽管我使用的是异步等待,但它仍在继续。 我得到的结果是: 感谢帮助! ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在使用与 TypeOrm 的多对多关系,后者需要 Id 来查找文章的子类别。
问题是 map 没有等待将结果推送到数组中。
这是我的 map function 与列表和日志:
const subcategories = articleDto.subcategoriesIds.split(',').map(x => +x)
const subcategoriesList = []
await subcategories.map(async (subcategoryId) => {
console.log('start:' + subcategoryId)
const category = await this.subcategoriesService.getSubcategoryById(subcategoryId);
console.log('mid:' + subcategoryId)
await subcategoriesList.push(category);
console.log('end:' + subcategoryId)
});
console.log('### ' + subcategories);
console.log('### ' + subcategoriesList);
这是日志的 output:
start:2
start:3
### 2,3
###
mid:2
end:2
mid:3
end:3
我不明白为什么不等待结果,如果您知道如何解决此问题,感谢您的帮助。
编辑:通过在内部使用 map 添加Promise.all
解决了这个问题
const subcategories = articleDto.subcategoriesIds.split(',').map(x => +x);
const subcategoriesList = await Promise.all(subcategories.map((subcategoryId) => {
return new Promise((resolve => {
this.subcategoriesService.getSubcategoryById(subcategoryId).then(result => {
resolve(result);
});
}))
}));
数组原型方法不会等待,即使它们是异步的。 代码仍然以同步方式触发。 如果你需要这些等待你可以做
const subcategories = articleDto.subcategoriesIds.split(',').map(x => +x)
const subcategoriesList = []
for (const subCategoryId of subcategories) {
console.log('start:' + subcategoryId)
const category = await this.subcategoriesService.getSubcategoryById(subcategoryId);
console.log('mid:' + subcategoryId)
await subcategoriesList.push(category);
console.log('end:' + subcategoryId);
}
console.log('### ' + subcategories);
console.log('### ' + subcategoriesList);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.