显然,我在这里做错了,但我没有看到它。
我已将代码缩减到下面,以说明我遇到的问题。
使用async.series
我正在处理一组文件。对于每个文件,我阅读它,并对内容做一些事情,然后继续。如果我将readFile
调用更改为readFileSync
,我会获得预期的输出,但由于其他各种原因,这不是一个可以在这里工作的解决方案。
var fs = require('fs');
var async = require('async');
huh();
function huh() {
for (var i in [1,2]) {
async.series([
function (callback) { process('a', callback); },
function (callback) { process('b', callback); }
], function () { console.log('series done')});
console.log('done: ' + i);
}
}
function process(word, callback){
fs.readFile('whatever', function (err, content) {
console.log(word);
callback();
});
}
我在运行上述内容时的期望是:
a
b
series done
done: 0
a
b
series done
done: 1
但我得到的是
done: 0
done: 1
a
a
b
series done
b
series done
我做错了什么?
答案 0 :(得分:0)
var fs = require('fs');
var async = require('async');
huh();
function huh() {
var queue = [];
for (var i in [1, 2]) {
(function(tmpi) {
queue.push(function(callback) {
process('a', callback);
});
queue.push(function(callback) {
process('b', callback);
});
queue.push(function(callback) {
console.log('series done');
callback()
});
queue.push(function(callback) {
console.log('done: ' + tmpi);
callback()
});
})(i);
}
async.series(queue, function() {
console.log('all done!')
});
}
function process(word, callback) {
fs.readFile('whatever', function(err, content) {
console.log(word);
callback();
});
}