그래서 중첩 된 비동기 코드가 함께 작동하며 멋진 결과를 얻었을 때를 제외하고 모두 괜찮은 것처럼 보입니다. 일련의 블록의 마지막 기능은 foreach는이다 : 그 다음 async.parallel로 전환비동기를 올바르게 사용 (forEach와 함께)
순서대로 실행되지 않습니다 다음과 같은 덩어리를 추적 관리 : 나는하여이 코드를 테스트
async.forEach(array, function(elem, callback) {
async.parallel([
function(callback) {
database-call-A(elem, unction(err, data) {
if(err){
console.log("error on first parallel");
callback({err: false}); // will break out
} else {
elem.c = data;
callback();
}
});
},
function(callback) {
database-call-B(elem, function(err, data) {
if(err){
console.log("error on first parallel");
callback({err: false}); // will break out
} else {
elem.c = data;
callback();
}
});
}
]); // end async.parallel
// if forEach needs a callback after every iteration (which I think it does?)
console.log("PRINTS N TIMES - ONCE FOR EVERY ITERATION");
callback(); // both parallel functions have run, call back forEach
}); // end forEach
console.log("Donions - prints when finished");
사방에 인쇄 진술을 던지면서, "N 개의 시간 인쇄 ..."가 N 번 실행되었다는 것을 알아 차렸다. 그런 다음 "Donions .."를 얻었고 그런 다음 내 무언가를했다. 및 기타 물건(); 내 async.parallel에서 호출되기 시작했다.
async.parallel의 콜백을 기다리지 않고 forEach 반복을 수행하는 이유는 무엇입니까?
네가 맞아! 나는 조금 더 단순화했다. 좀 더 많은 정보를 얻기 위해 업데이트를 확인했다. (내 db 호출은 돌아 왔을 때 우리가 앞면에 좋았 기 때문에 호출했다.) - 나는 확실히 forEach가 실제로 컴퓨터가 있지만 API에서 찾을 수없는 이유를 궁금해했습니다. 각 경우에 어떤 것이 있는지 보도록하겠습니다. – gadu
정확히 무엇이 문제입니까? – jeremija
정확히 내가 설명한, 내 병렬 전에 내 병렬 실행 코드가 있어요 - 내 콜백 코드 때문에 이미 그 콜백이 일어난 때문에 forEach 밖으로 반환하지 않습니다. – gadu