javascript - JavaScript、异步/等待和承诺
问题描述
我对 async/await 和一些 Promises 有疑问。
我有这个代码。它从这里开始:
let valid = await LoadRouter.load(body);
console.log(valid);//showing me Pending Promises
功能是:
loadGeneratingUnits(data){
let newUGArray = [];
try {
const result = data.map(async (itemGU, index) => {
const checGU = await this.checkDataGu(itemGU.nombre);
if(!checGU){
let newUG = {
generating_unit_name: itemGU.nombre,
description: (!itemGU.descripcion) ? null : itemGU.descripcion,
it_generating_unit_id: (!itemGU.it_unidad_generadora) ? 0 : itemGU.it_unidad_generadora
}
newUGArray.push(newUG);
}
})
return result;
} catch (error) {
throw new Error(error.message)
}
}
这是我遇到问题的地方
async checkDataGu(guName = null){
if(guName){
return await generatingUnitModel.findOne({
attributes: [
'id',
'generating_unit_name',
],
where: {
generating_unit_name: guName
}
})
}
}
有关在此代码上使用 async/await 的任何评论?
解决方案
通过对data.map()
异步进行回调,data.map()
现在将数据转换为 Promises 数组,因为异步函数的返回值始终是 Promise。await
只会等待 Promise 解决,而不是它们的数组。您应该Promise.all
为此使用:
const result = Promise.all(data.map(async (itemGU, index) => {
const checGU = await this.checkDataGu(itemGU.nombre);
if(!checGU){
let newUG = {
generating_unit_name: itemGU.nombre,
description: (!itemGU.descripcion) ? null : itemGU.descripcion,
it_generating_unit_id: (!itemGU.it_unidad_generadora) ? 0 : itemGU.it_unidad_generadora
}
newUGArray.push(newUG);
}
}))
现在result
是一个Promise,它将使用每个内部 Promise 解析的值数组来解析。最终这意味着你的鞋面let valid = await LoadRouter.load(body);
应该用你期望的数组来解析。
推荐阅读
- git - git忽略了一些不应该被忽略的东西
- django - get_expiry_age() 在 Django 中返回什么
- javascript - 将登录用户信息传递给 javascript 的问题
- excel - VBA - 使用 VBA 代码时未导出 XML 映射
- java - 如何将图片发送到 Discord 频道
- r - 具有滞后变量的 dplyr rowwise
- php - 如何在laravel中从多对多关系中获取数据
- web-scraping - robots.txt 的抓取延迟如何解释?
- mongodb - 在 mongodb 缝合应用程序中使用 aws ses 服务时出现区域错误
- python - 在项目子文件夹中调用 search tasks.py