我需要这些异步循环的帮助。每个对象内部都有一个材质数组。每当材质循环结束时,我需要清除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永远不会被清除或重置为空数组,它将继续添加每个“对象”的“材料”
答案 0 :(得分:0)
您需要两个Promise.all
,object
中的每个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