forEach안에서 변수에 데이터를 할당하면 비동기로 처리되지만, 전체 forEach는 동기처럼 실행됨. 즉 forEach는 async 콜백을 기다려주지 않음
for...of는 await 없이도 동기 흐름을 보장해주기 때문에 데이터가 정확히 계산됨.
to-be
data.AllSpace.forEach(async (loc) => {
console.log('entryInfo.IsEntryTemp || loc.IsEntryTemp: ', entryInfo.IsEntryTemp || loc.IsEntryTemp)
entryInfo.IsEntryTemp = await (entryInfo.IsEntryTemp || loc.IsEntryTemp)
entryInfo.AccessZoneLength = await (entryInfo.AccessZoneLength + (loc.AccessZone?.length || 0))
})
console.log('entryInfo: ', entryInfo)
as-is
const entryInfo = { IsEntryTemp: false, AccessZoneLength: 0 }
for (const loc of data.AllSpace) {
entryInfo.IsEntryTemp = entryInfo.IsEntryTemp || loc.IsEntryTemp
entryInfo.AccessZoneLength += loc.AccessZone?.length || 0
}
data.AllSpace.forEach(async (loc) => {
// 이 안의 await은 loc에만 적용, forEach 흐름과는 별개
});
for (const loc of data.AllSpace) {
entryInfo.IsEntryTemp = entryInfo.IsEntryTemp || loc.IsEntryTemp;
}