Javascript forEach循环中的异步/等待
下面的JavaScript返回一个奇怪的数组版本。下面的forEach不向控制台记录任何内容。我可能在这里遗漏了一些非常基本的东西,但我知道数组已经填充了……除非它因为异步而在稍后才被填充,Chrome只是在填充之后计算console.logJavascript forEach循环中的异步/等待,javascript,Javascript,下面的JavaScript返回一个奇怪的数组版本。下面的forEach不向控制台记录任何内容。我可能在这里遗漏了一些非常基本的东西,但我知道数组已经填充了……除非它因为异步而在稍后才被填充,Chrome只是在填充之后计算console.log 让damageRollStringArr=[] 怪物。伤害类型。forEach(异步(伤害类型名称)=>{ const damageType=await checkResponseAndReturnValue(await DamageTypesServic
让damageRollStringArr=[]
怪物。伤害类型。forEach(异步(伤害类型名称)=>{
const damageType=await checkResponseAndReturnValue(await DamageTypesService.FindMageType(damageTypeName.trim()))
如果(损坏类型!==null){
damageRollStringArr.push(损坏类型损坏)
}
})
damageRollStringArr.forEach(el=>console.log(el))
//是否正在返回一个包含对象的空数组[]?
回程损坏器
谢谢demageRollStringArr.forEach(第二个forEach)不会等待monster.demage\u types.forEach(第一个forEach)执行,尽管第一个forEach中有异步等待 要实现你想做的,试试这个
let damageRollStringArr = []
const promises = monster.damage_types.map(async (damageTypeName) => {
const damageType = await checkResponseAndReturnValue(await DamageTypesService.findDamageType(damageTypeName.trim()))
if (damageType !== null) {
damageRollStringArr.push(damageType.damage)
}
})
await Promise.all(promises)
damageRollStringArr.forEach(el => console.log(el))
return damageRollStringArr
或者,可以使用normal for()循环替换第一个foreach
let damageRollStringArr = []
for(let i = 0; i < monster.demage_types.length; i++) {
const damageType = await checkResponseAndReturnValue(await DamageTypesService.findDamageType(damageTypeName.trim()))
if (damageType !== null) {
damageRollStringArr.push(damageType.damage)
}
}
damageRollStringArr.forEach(el => console.log(el))
return damageRollStringArr
让damageRollStringArr=[]
for(设i=0;iconsole.log(el))
回程损坏器
第一个解决方案将并行运行循环,第二个解决方案将按顺序运行循环谢谢,LHJ。我认为从响应调用返回的数据有问题,而不是forEach函数在异步等待调用方面有问题。我现在已经读完了:我需要比现在更好地理解forEach。