node.js ncp(异步递归复制实用程序)回调未调用

时间:2014-01-28 05:45:38

标签: node.js

我是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的新手,我只是假设我对节点一无所知。

1 个答案:

答案 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);
});