我有一个for循环,后面调用了一个动作fs.copy。在循环完成后,我需要执行一个命令。一旦完成,我想我需要做一个回调。我认为我遇到的问题是fs.copy运行异步,因此for循环实际上在fs.copy操作之前完成。建议?
var sessionNumeber = 7;
photoOrder = (An array of photo names);
for(var i = photoOrder.length - 1; i >= 0; i--) {
console.log('Moving Photo');
fs.copy(cfg.watchedFolder+photoOrder[i]+'.jpg', cfg.outputFolder+sessionNumber+"/"+i+'.jpg', function (err) {
if (err) {
// i.e. file already exists or can't write to directory
throw err;
}
});
});
nextCommand();
答案 0 :(得分:1)
因为for
循环不是异步但copy
是,所以你不能使用for
循环通过异步函数。解决方案是使用async
库。
https://github.com/caolan/async
async.map(arr,iteratee,[callback])
例如,您可以尝试:
async.map(photoOrder, function (photo, callback) {
console.log('Moving Photo');
fs.copy(cfg.watchedFolder + photo + '.jpg', cfg.outputFolder + sessionNumber + "/" + i + '.jpg', function (err) {
if (err) {
// i.e. file already exists or can't write to directory
callback(err);
}
});
}, function (err, results) {
nextCommand();
});