私はノードjs expressフレームワークで作業していますが、forループ内で2-3ネストされたコールバック関数を呼び出す必要があります。 以下は私のコードです:私は複数のコールバックをした複数の関数をjavascript内の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の出力は心配していません。
私は2つの関数processConsignとgenerateXmlを持っています。 generateXmlはprocessConsignのコールバックで呼び出されます。しかし、私はforloopがこれらの2つのタスクが完了し、これらの2つの関数の処理を待たずにループをインクリメントし続けるのを待つことはないと思います。
私はこの2つのプロセスの完了を待ってループを待ってから次のループを実行する方法はありますか?
リターンコールバック(null、getOrdersResponse)で '___getOrdersResponse___'の配列が必要ですか? – kiro112
@ kiro112いいえここに配列がないとは思いません。私はちょうどいくつかの出力をしたい。それは文字列かもしれません。私はプロセスが適切に実行されたことを知ることができます。 – Simer
hmm。この場合、複数の応答(ループ)があります。あなたの上には単一の応答だけが必要ですか? – kiro112