Async.js で並列関数を使用していますが、何らかの理由で最終的なコールバックが実行されず、どこにもエラーが発生していません。
並列呼び出しに渡される関数の配列を動的に作成しています。
// 'theFiles' is an array of files I'm working with in a code-generator style type of scenario
var callItems = [];
theFiles.forEach(function(currentFile) {
var genFileFunc = generateFileFunc(destDir + "/" + currentFile, packageName, appName);
callItems.push(genFileFunc(function(err, results) {
if(err) {
console.error("*** ERROR ***" + err);
} else {
console.log("Done: " + results);
}
}));
});
async.parallel(callItems, function(err, results) {
console.log(err);
console.log(results);
if(err) {
console.error("**** ERROR ****");
} else {
console.log("***** ALL ITEMS HAVE BEEN CALLED WITHOUT ERROR ****");
}
});
次に、外側の関数 (上記の forEach を実行している関数の外側) に、generateFileFunc() 関数があります。
// Function that returns a function that works with a file (modifies it/etc).
function generateFileFunc(file, packageName, appName) {
return function(callback) {
generateFile(file, packageName, appName, callback);
}
}
私はこのSOの投稿を見てきましたが、それは私が今いる場所にたどり着くのに役立ちました. ただし、最後のコールバックは実行されていません。ただし、並列呼び出しのすべてのアイテムが実行されています。最下部の gnerateFile (関数) の内部で、コールバックを呼び出します。
なぜこれが適切に実行されないのか、誰にも分かりますか?
最終結果は、各関数呼び出しを並行して処理し、完了時に通知されるため、他の命令の実行を続行できます。
ありがとう!