这个问题与我previous question的答案有关。 @robertklep建议我使用mapLimit()
而不是.map()
,因为.map()
无法处理大量数据,并且使用该解决方案一切正常。但是现在我重构了我的代码,现在.<fn>Limit()
函数都没有在第一次循环迭代后运行。我在这里遗漏了什么吗?
var proccesBook = function(file, cb) {
testFile(file, function (epub) {
if (epub) {
getEpuData(file, function (data) {
insertBookInDB(data)
})
}else{
cb(file)
}
})
}
async.mapLimit(full_files_path, 10, proccesBook, function(err){
if(err){
console.log('Corrupted file', err);
} else {
console.log('Processing complete');
};
})
// ---> only runs for the first 10 series data
答案 0 :(得分:2)
您的首要问题是,您无法在cb
的成功分支中致电processBook
。您的控制流必须保证为每个工作程序函数调用调用一次回调。
其他旁白:
eachLimit
没问题
mapLimit
cb(file)
,因为这会被解释为错误和剩余处理。var proccesBook = function(file, cb) {
testFile(file, function (epub) {
if (epub) {
getEpuData(file, function (data) {
insertBookInDB(data)
cb() // This is what you were missing
})
}else{
cb()
}
})
}
async.eachlimit(full_files_path, 10, proccesBook, function(err){
if(err){
console.log('Corrupted file', err);
} else {
console.log('Processing complete');
};
})