使用FS动作执行FOR循环后执行

时间:2016-02-26 00:52:18

标签: javascript node.js fs fs-extra

我有一个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();

1 个答案:

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