【发布时间】:2017-03-21 06:04:35
【问题描述】:
我在 node js express 框架中工作,我有一个场景,我必须在 for 循环中调用 2-3 个嵌套回调函数。 以下是我的代码:
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 不会等待这两个任务完成并保持递增循环而不等待这两个函数的处理。
有什么方法可以让 for 循环等待这两个过程完成,然后执行下一个循环?
【问题讨论】:
-
您期望 getOrdersResponse
in return callback(null, getOrdersResponse);的数组? -
@kiro112 不,我不希望这里有任何数组。我只是想要一些输出。可能是字符串。这样我就可以知道该过程已正确执行。
-
嗯。但在这种情况下,你有一个多重响应(循环)。但基于以上你只想要一个响应?
-
是的。毕竟,每个循环都会执行一次回调。或者我可以继续附加每个循环的输出并调用一次回调并发送一次响应。
-
请检查更新
标签: javascript node.js express for-loop