首页 > 解决方案 > 推送到承诺内的上层范围数组

问题描述

我需要推送到位于forEach循环范围内的数组。在每一个中,它都会调用一个带有值的 Promise,并将结果推送到数组中。

function getSquareOfEvenNumber(num) {
  return new Promise((resolve, reject) =>{
    if (num % 2 !== 0 ) reject('Please pass a even number only!');
    resolve(num * num);
    })
}

const  getResult = (a) => {
  let resultants = [6];
  let totalErrors = 0;
  a.forEach(async (e) => {  
    try {
      const d = await getSquareOfEvenNumber(e)
      resultants.push(d)
    } catch(err) {
      totalErrors++;
    }
  })
  return {
    resultants,
    totalErrors,
    resultantCount: resultants.length
  };
}

另外,我在下面尝试过。

a.forEach(async (e) => {  
    getSquareOfEvenNumber(e)
      .then((d) => resultants.push(d))
      .catch((err) => resultants++)
  })

另外,尝试使用for...of循环。

 for (e of a) {  
    getSquareOfEvenNumber(e)
      .then((d) => resultants.push(d))
      .catch((err) => resultants++)
  }
But 

它也不起作用,我正在获取上变量的初始值。它们没有在循环中被修改。

{ resultants: [ 6 ], totalErrors: 0, resultantCount: 1 }

请有人解释为什么会发生这种情况以及是否有任何解决方法。

标签: javascriptpromiseasync-await

解决方案


推荐阅读