将array.foreach的结果存储在另一个数组中

时间:2019-03-08 23:35:36

标签: javascript

我有一个这样的代码示例:

  const iam = ['dd', 'aaa', 'cc'];
    async function bigTest() {
      async function details() {
        const arr = [];
        const files = [];
        iam.forEach(async (i) => {
          arr.push({
            name: 'test',
          });
    
          files.push(arr);
          return files;
        });
      }
    
      const result = await details();
      console.log(result);
    }
    bigTest();

并且我想将arr的最终结果存储在数组files中,但是它返回未定义的

在循环内部,它返回数组,但是在details函数外部,它返回未定义

4 个答案:

答案 0 :(得分:1)

您应该使用函数map

由于您需要async声明,因此map函数中的数组包含Promises,因此您需要按以下方式解决它们:

Promise.all(files);

const iam = ['dd', 'aaa', 'cc'];
async function bigTest() {
  async function details() {
    const files = iam.map(async(name) => {
      return { name };
    });

    return Promise.all(files);
  }

  const result = await details();
  console.log(result);
}

bigTest();
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

我认为,您真正想做的是使用forEach()之外的返回值

  const iam = ['dd', 'aaa', 'cc'];
    async function bigTest() {
      async function details() {
        const arr = [];
        const files = [];
        iam.forEach(async (i) => {
          arr.push({
            name: 'test',
          });
    
          files.push(arr);
        });
        return files;
      }
    
      const result = await details();
      console.log(result);
    }
    bigTest();

答案 2 :(得分:0)

Array.forEach始终返回未定义。您正在寻找Array.map

答案 3 :(得分:0)

此代码中的任何一个都不应该是异步的。摆脱所有异步/唤醒,一切都会好起来的。