[英]JavaScript, async/await and promises
我有 async/await 和一些 Promise 的問題。
我有這個代碼。 它從這里開始:
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);
應該用你期望的數組解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.