在 FOR 循环后执行 FS 动作
Execute after FOR loop with FS action
我有一个 for 循环,它在 fs.copy 之后调用一个动作。 for循环完成后,我需要执行一个命令。我想我需要在 for 完成后进行回调。我认为我 运行 遇到的问题是 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();
因为 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();
});
我有一个 for 循环,它在 fs.copy 之后调用一个动作。 for循环完成后,我需要执行一个命令。我想我需要在 for 完成后进行回调。我认为我 运行 遇到的问题是 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();
因为 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();
});