Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript forEach循环中的异步/等待_Javascript - Fatal编程技术网

Javascript forEach循环中的异步/等待

Javascript forEach循环中的异步/等待,javascript,Javascript,下面的JavaScript返回一个奇怪的数组版本。下面的forEach不向控制台记录任何内容。我可能在这里遗漏了一些非常基本的东西,但我知道数组已经填充了……除非它因为异步而在稍后才被填充,Chrome只是在填充之后计算console.log 让damageRollStringArr=[] 怪物。伤害类型。forEach(异步(伤害类型名称)=>{ const damageType=await checkResponseAndReturnValue(await DamageTypesServic

下面的JavaScript返回一个奇怪的数组版本。下面的forEach不向控制台记录任何内容。我可能在这里遗漏了一些非常基本的东西,但我知道数组已经填充了……除非它因为异步而在稍后才被填充,Chrome只是在填充之后计算console.log

让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。