nodejsアプリケーションに次のコードがあります。
function someFileOperation(callback) {
var files = ...;
files.forEach(function (file) {
doSomethingAsync(file, function (err, result) {
});
});
}
すべてのdoSomethingAsync()がコールバック関数を呼び出し、doSomethingAsync()でエラーが発生したときに一度だけ呼び出す場合に、someFileOperation()のコールバックを呼び出すエレガントな方法は何ですか?
今のところ私はこのようなものを思いついた:
function someFileOperation(callback) {
var files = ...;
var noFiles = files.length;
files.forEach(function (file) {
doSomethingAsync(file, function (err, result) {
if (err) {
callback(err);
callback = function () {}; // I don't want it to be called again
} else if (--noFiles <= 0) {
callback(null, true);
}
});
});
}
しかし、これはこのような単純なタスクでは多くのオーバーヘッドになると思います。だから私はもっとエレガントな方法、あるいはこの種の問題のための小さなフレームワークを探しています