-1

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

1 回答 1

1

因为for循环不是异步的,而是异步copy的,所以你不能使用for循环异步函数。解决方案是使用async库。

https://github.com/caolan/async

async.map(arr, iteratee, [回调])

例如,您可以尝试:

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();
});
于 2016-02-26T01:13:02.167 回答