5

Jakeタスクは、長時間実行されるシステムコマンドを実行します。別のタスクは、開始する前に最初のタスクが完全に終了することに依存します。'child_process'の'exec'関数は、システムコマンドを非同期で実行し、最初のタスクが完了する前に2番目のタスクを開始できるようにします。

2番目のタスクが開始する前に最初のタスクの長時間実行されているシステムコマンドが確実に終了するようにJakefileを作成する最もクリーンな方法は何ですか?

最初のタスクの最後にダミーループでポーリングを使用することを考えましたが、これは悪臭がします。もっと良い方法があるに違いないようです。私はこのSOの質問を見たことがありますが、それは私の質問に完全には対応していません。

var exec = require('child_process').exec;

desc('first task');
task('first', [], function(params) {
  exec('long running system command');
});

desc('second task');
task('second', ['first'], function(params) {
  // do something dependent on the completion of 'first' task
});
4

2 に答える 2

2

Matthew Eernisse の投稿を読み直して、自分の質問に対する答えを見つけました。やり方が気になる方へ:

var exec = require('child_process').exec;

desc('first task');
task('first', [], function(params) {
  exec('long running system command', function() {
    complete();
  });
}, true); // this prevents task from exiting until complete() is called

desc('second task');
task('second', ['first'], function(params) {
  // do something dependent on the completion of 'first' task
});
于 2011-07-20T01:01:33.423 に答える
1

将来の参考のために、他の依存関係のない同期execモジュールがあります。

例:

var allsync = require("allsync");
allsync.exec( "find /", function(data){
    process.stdout.write(data);
});
console.log("Done!");

上記の例では、プロセスが存在したDoneにのみ印刷されます。関数は基本的に完了するまでブロックします。findexec

于 2013-02-05T23:23:47.260 に答える