2017-03-22 3 views
-1

私はライブラリを使用してsvnにファイルを更新/コミットしています。問題は私のアプリがsvn up/commitをループで呼び出すことで、呼び出しの非同期性のためにsvn-upは前のsvn-upが終了する前にループの次の繰り返しから呼び出されます。
この問題を処理するにはどうすればよいですか?前のコールが完了するまで、次のコールが発生しないようにする方法はありますか?node.js svnは同期的に更新/コミットしますか?

答えて

0

asyncモジュールを使用して行う方法を考えました。
async.seriesは、非同期タスクを連続して実行するために使用できます。 これが私のやり方です。

function commitFile(arg, callback) { 
    svnClient.getStatus(filePath, function(err, data) { 
     //... 
     svnClient.commit(['Commit msg', filePath], callback); 
     //... 
    }); 
} 
var toCommit = []; 
for (var i = 0, len = requests.length; i < len; i++) { 
    //Adding files to commit, async.apply enables adding arguments to the anonymous function 
    toCommit.push(async.apply(function(arg, cb) { 
     commitFile(arg, cb); 
    }, 'arg1')); 
} 
async.series(toCommit,function (err, result) { 
    console.log('Final callback'); 
    if(err) { 
     console.log('error', err); 
    } else { 
     console.log('result of this run: ' + result); 
    } 
}); 

async.seriesには、実行後にコールバックを呼び出す必要がある関数の配列が必要です。コールバックを使用して、実行中の現在の関数が実行され、次に実行する次の関数が選択されることを確認します。

関連する問題