-1

後にアクション fs.copy を呼び出す for ループがあります。for ループが完了したら、コマンドを実行する必要があります。for が完了したら、コールバックを行う必要があると思います。私が遭遇していると思う問題は、 fs.copy が非同期で実行されるため、 fs.copy アクションが完了する前に for ループが実際に完了することです。提案?

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 に答える