0

我的 nodejs 应用程序中有以下代码:

function someFileOperation(callback) {
    var files = ...;
    files.forEach(function (file) {
        doSomethingAsync(file, function (err, result) {

        });
    });
}

什么是调用 someFileOperation() 的回调的优雅方法,以防所有 doSomethingAsync() 调用它们的回调函数并且只调用一次,当 doSomethingAsync() 发生错误时?

现在我想出了这样的事情:

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 回答