簡體   English   中英

JavaScript,異步/等待和承諾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM