我是node.js的新手,也许我做错了什么。 这个非常流行的异步递归复制实用程序npmjs.org/package/ncp。
我试图并行运行它:
var ncp = require('ncp').ncp;
var dirs = [
['test/from/1', 'test/to/1'],
['test/from/2', 'test/to/2'],
['test/from/3', 'test/to/3']
];
var copyDirAsync = function (dir) {
ncp(dir[0], dir[1], function (err) {
console.log('done: ' + dir[1]);
});
}
for (var i = 0; i < dirs.length; ++i) {
copyDirAsync(dirs[i]);
}
所以,所有的dirs复制都很好。但是我只得到一个随机目录打印的console.log消息。另外两个人没有到达。该计划刚刚存在。如果我添加15秒超时以使节点保持运行一段时间,则回调也不会到达。我认为这是ncp的一个问题,但是每天有1个月的旧版本0.5.0下载30K,到目前为止没有报道任何问题,加上我是node.js的新手,我只是假设我对节点一无所知。
答案 0 :(得分:3)
首先阅读Asynchronous iteration patterns
现在,您可以使用async模块,特别是async.series
,就像这样;
var ncp = require('ncp').ncp
, async = require('async');
var dirs = [
['test/from/1', 'test/to/1'],
['test/from/2', 'test/to/2'],
['test/from/3', 'test/to/3']
];
var copyDirAsync = function (dir, done) {
ncp(dir[0], dir[1], function (err) {
if (err) return done(err);
console.log('done: ' + dir[1]);
done();
});
}
async.each(dirs, copyDirAsync, function(err){
console.log(err);
});