每当内部循环结束时,如何清除此数组?

时间:2019-05-31 00:08:26

标签: javascript node.js

我需要这些异步循环的帮助。每个对象内部都有一个材质数组。每当材质循环结束时,我需要清除objectRedirects。

  objects.map(async object => {
      objectRedirects = [];

      await Promise.all(
        object.materials.map(async material => {
          const childObject = await ItemObject.findOne({
            name: object.name,
            material: material
          })
            .lean()
            .exec();

          objectRedirects.push(childObject);
        })
      );
    });

当前objectRedirects永远不会被清除或重置为空数组,它将继续添加每个“对象”的“材料”

1 个答案:

答案 0 :(得分:0)

您需要两个Promise.allobject中的每个objects一个,对象materials数组中的每个项目一个。然后,.map将在每次迭代中创建一个新的内部数组。 (.map不应用于副作用-请使用它来创建另一个数组)

const arrayOfObjectMaterialsArray = await Promise.all(objects.map(object => Promise.all(
  object.materials.map(material => (
    ItemObject.findOne({
      name: object.name,
      material: material
    })
      .lean()
      .exec()
  ))
)));

您可以只从每个.map回调中返回Promise-无需将内部函数设为async