2014-01-28 2 views
2

Я новичок в node.js, и, возможно, я что-то делаю неправильно. Существует эта чрезвычайно популярная утилита для рекурсивной копии async npmjs.org/package/ncp.node.js ncp (async recursive copy utility) callback not called

Я пытаюсь запустить его параллельно:

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]); 
} 

Таким образом, все каталоги копирования просто отлично. Однако я получаю только одно сообщение console.log, напечатанное со случайным каталогом. Остальные двое не приходят. Программа существует. Если я добавлю тайм-аут на 15 секунд, чтобы узел продолжал работать некоторое время, обратные вызовы также не поступают. Я бы предположил, что это проблема с ncp, однако с 30K загрузками в день 1-месячной версии realease 0.5.0, и до сих пор не сообщалось о проблемах, плюс я новичок в node.js, я просто предполагаю, что я не разбираются в узле.

ответ

3

Сначала прочитайте Asynchronous iteration patterns

Теперь вы можете использовать модуль asyncasync.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); 
}); 
+1

Я уменьшил свой пример из своего приложения, где использовал ncp в async.map(), где он работает параллельно. Я просто не понимаю, почему он не может работать параллельно? – srgstm

+0

Сделал работу, перейдя на mapSeries. Тем не менее неясно о параллели: ncp - это функция с 200 локами, упакованная как замыкание без определенных глобальных переменных. – srgstm

Смежные вопросы