问题描述
抱歉,这个问题可能会重复,但我一直在使用 javascript 中的 foreach 循环。
let fields = temp_deviceAllocation.devices.forEach(async (device) => {
const fields = await device_model
.findOne({ device_id: device })
.select({ fields: 1 });
});
console.log({
data: await this.getdeviceAllocationById(temp_deviceAllocation._id),fields: fields,});
我通过记录字段值进行检查,但在此处显示未定义,当我在 foreach 中单独注销这些值时,它将显示值。我尝试在 foreach 中返回值,但它仍然显示为空。
如果我错过了什么,请纠正我。
解决方法
试试
let fields = temp_deviceAllocation.devices.forEach(async (device) => {
return await device_model
.findOne({ device_id: device })
.select({ fields: 1 });
});
console.log({
data: await this.getdeviceAllocationById(temp_deviceAllocation._id),fields: fields,});
,
默认情况下 forEach 是异步不知道的,因此无需等待承诺首先解决即可触发多个调用。因此,您应该避免在 forEach 中使用 await,而可以使用 for of 循环。 我认为这应该有效,从我从你的代码块中可以看出:
const deviceFields = []
for(const device of temp_deviceAllocation.devices){
const fields = await device_model
.findOne({ device_id: device })
.select({ fields: 1 });
});
deviceFields.push(fields)
}
console.log(deviceFields)