我在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);
}
});
});
}
但我认为这对于这么简单的任务来说是一个很大的开销。所以我正在寻找一种更优雅的方式,或者为这类问题寻找一个小框架
答案 0 :(得分:3)
使用async.map或async.foreach,请参阅此处:https://github.com/caolan/async#map和https://github.com/caolan/async#forEach
async.map方法接受一个项目数组,并对数组中的每个项目执行相同的异步调用。如果没有遇到错误,它将使用新的结果数组调用回调函数。