0

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);
            }
        });
    });
}

しかし、これはこのような単純なタスクでは多くのオーバーヘッドになると思います。だから私はもっとエレガントな方法、あるいはこの種の問題のための小さなフレームワークを探しています

4

1 に答える 1

3

async.mapまたはasync.foreachを使用します。https://github.com/caolan/async#mapおよびhttps://github.com/caolan/async#forEachを参照しください

async.mapメソッドはアイテムの配列を受け取り、配列内の各アイテムに対して同じ非同期呼び出しを並行して実行します。エラーが発生しなかった場合は、結果の新しい配列を使用してコールバックを呼び出します。

于 2012-12-17T16:59:13.720 に答える