我在节点js express框架中工作,我有一个场景,我必须调用2-3循环内嵌的回调函数。 下面是我的代码:在JavaScript中调用循环内的多个函数
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如被称为:
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);
}
});
},
}
我已经多次回调,因为函数结束多种场景。我不关心getOrders的输出,因为我不打算在任何地方使用该输出。
这里我有两个函数processConsign和generateXml。在processConsign的回调中调用generateXml。但我认为,forloop不会等待这两项任务完成,并且不会等待这两个函数的处理,而是继续增加循环。
有没有什么办法可以让我循环等待这两个进程的完成,然后执行下一个循环?
您期待___getOrdersResponse__数组返回回调(null,getOrdersResponse);'? – kiro112
@ kiro112不,我不期待任何阵列在这里。我只是想要一些输出。它可能是字符串。这样我就可以知道这个过程已经正确执行了。 – Simer
嗯。但在这种情况下,你有一个多重响应(循环)。但基于上面,你只需要一个单一的回应? – kiro112