비동기지도 기능이 있습니다. 이 문서에서는 기존 문서가 아닌 경우 일련의 문서를 만듭니다. 첫 번째로 생성 된 문서의 ID는 다음 문서의 경우 parent
으로 설정해야합니다.JS : Async/await가 루프에서 결과를 기다리는 것처럼 보이지 않습니다.
await Promise.all(data.map(async (o, index) => {
const key = o.name
const value = o.value
const query = { [key]: value }
const parentID = refID
console.log(parentID);
if (parentID) query.parent = parentID
// Check if document is existing
let ref = await References.findOne(query)
refID = ref ? ref._id : undefined
// If not existing, create it
if (!refID) {
const refInserted = await References.insertOne(query)
refID = refInserted ? refInserted.insertedId : undefined
}
console.log(refID)
}))
그래서 내가 REFID와 parentID 교류와 함께이 로그 출력을 기대 :
undefined (parentID first run)
yBZWYJcWBoSzx9qwy (refID first run)
yBZWYJcWBoSzx9qwy (parentID second run)
23poGAbg85LCqkcZc (refID second run)
23poGAbg85LCqkcZc (parentID third run)
yBJYzedxftLe2Xm4r (refID third run)
yBJYzedxftLe2Xm4r (parentID fourth run)
PpzjuZ4vfrktNH4ez (refID fourth run)
을하지만 어떻게해야합니까는 로그 출력을 번갈아되지 않는다는 것을 나에게 보여
undefined
undefined
undefined
undefined
undefined
undefined
yBZWYJcWBoSzx9qwy
23poGAbg85LCqkcZc
yBJYzedxftLe2Xm4r
PpzjuZ4vfrktNH4ez
, 그러나 두 블록으로 실행하고 있는데 insertOne
(몽고 네이티브 드라이버 사용)에 대해 await
을 설정했습니다. 그래서 분명히 내가 뭔가를 오해하고있어 :
제가 생각하기에, 그게 map
입니다 -이 경우 - forEach 루프와 같습니다 : 처음 실행하면 기존 문서의 ID 또는 ID 새롭게 생성 된 문서 (나가지 않은 경우)가 추출됩니다. 두 번째 실행에서이 ID는 parentID로 설정되므로 두 번째로 생성 된 문서의 경우 상위 키가 설정됩니다.