노드 js express 프레임 워크에서 작업 중이며 루프 내에서 2-3 중첩 콜백 함수를 호출해야하는 시나리오가 있습니다. 다음은 내 코드입니다 : 나는 여러 콜백을 한여러 함수를 자바 스크립트에서 for 루프로 호출합니다.
module.exports = {
getOrders: function (callback) {
getOrders(function(err_getOrders, getOrdersResponse){
if(err_getOrders){
console.log("generate Order process error:"+err_getOrders);
return callback(err_getOrders);
}
else{
console.log("generate Order process success:"+getOrdersResponse);
return callback(null, getOrdersResponse);
}
});
},
}
기능이 끝나는 때문에 :
for (i in jdp_tb_trades) {
var jdp_response_json_parsed = JSON.parse(jdp_tb_trades[i].jdp_response);
processConsign(jdp_tb_trades[i].tid, function(err_process_consign, lpnumber) {
if (err_process_consign) {
console.log("Some error occurred in processConsign. Error is:" + err_process_consign);
//Check if generate XML is enabled from admin end.
configuration.getOneByKey('generateXml', function(err_configuration, result_configuration) {
if (err_configuration) {
console.log('[generateXml]: generate xml enabled/disabled - No response.');
return callback(null, lpnumber);
} else {
if (result_configuration.value == 'true') {
console.log('[generateXml]: generate xml enabled.')
generateXml(jdp_tb_trades[i].tid, jdp_response_json_parsed, lpnumber, function(err_generate_xml, success_generate_xml);
if (err_generate_xml) {
return callback(err_generate_xml);
} else {
return callback(null, success_generate_xml);
}
});
} else {
console.log('[generateXml]: generate xml disabled.');
return callback(null, lpnumber);
}
}
});
} else {
//Check if generate XML is enabled.
configuration.getOneByKey(
'generateXml',
function(err_configuration, result_configuration) {
if (err_configuration) {
console.log('[generateXml]: generate xml enabled/disabled - No response.');
return callback(null, lpnumber);
} else {
if (result_configuration.value == 'true') {
console.log('[generateXml]: generate xml enabled.')
generateXml(jdp_tb_trades[i].tid, jdp_response_json_parsed, lpnumber, function(err_generate_xml, success_generate_xml) {
if (err_generate_xml) {
return callback(err_generate_xml);
} else {
return callback(null, success_generate_xml);
}
});
} else {
console.log('[generateXml]: generate xml disabled.');
return callback(null, lpnumber);
}
}
});
});
}
업데이트 위의 코드라는 기능의 일부로서이라고 getOrders 여러 시나리오. 그 출력을 어디에서든지 소비하지 않기 때문에 getOrders의 출력에 대해 걱정하지 않습니다.
여기에는 processConsign 및 generateXml의 두 가지 기능이 있습니다. generateXml은 processConsign의 콜백에서 호출됩니다. 그러나 for 루프는이 두 가지 작업이 완료 될 때까지 기다리지 않고이 두 기능의 처리를 기다리지 않고 루프를 계속 증가시키는 것으로 생각합니다.
이 두 프로세스를 완료하고 다음 루프를 실행하기 위해 루프 대기를 수행 할 수있는 방법이 있습니까?
콜백 (null, getOrdersResponse) 콜백에서 ___getOrdersResponse___'에 대한 배열이 필요합니다. – kiro112
@ kiro112 아니요 여기에 배열이 필요하지 않습니다. 나는 약간의 결과 만 원한다. 문자열 일 수 있습니다. 그래서 프로세스가 제대로 실행되었는지 알 수 있습니다. – Simer
흠. 이 경우 다중 응답 (루프)이 있습니다. 하지만 위의 자료는 단 하나의 응답 만 원하십니까? – kiro112