1

私は主に JavaScript プロジェクトで Rake の可能な代替品として Jake をテストしています。私が奇妙に感じていることの 1 つは、イベントが完了する前に完了イベントがトリガーされていることです。

次に例を示します。

task('some_task_1', {async: true}, function () {
    console.log("|- Doing something");

    var execCallback = function() {
        console.log("  |- Done something");
        complete();
    };

    setTimeout(execCallback, 2000);
});

task('some_task_2', {async: true}, function () {
    console.log("|- Doing something else");

    var execCallback = function() {
        console.log("  |- Done something else");
        complete();
    };

    setTimeout(execCallback, 2000);
});

task('task_runner', {async: true}, function () {
    var firstTask = jake.Task['some_task_1'];
    var secondTask = jake.Task['some_task_2'];

    firstTask.addListener("complete", function() { secondTask.invoke(); });
    secondTask.addListener("complete", function() { complete(); });

    firstTask.invoke();
});

task('default', function () {
    jake.Task['task_runner'].invoke();
});

出力は次のようになると予想していました。

|- Doing something
   |- Done something
|- Doing something else
   |- Done something else

ただし、実際に得られるのは次のとおりです。

|- Doing something
|- Doing something else
   |- Done something
   |- Done something else

では、Jake で async がどのように機能するべきかについて、いくつかの魔法がありますか? 実際にexecを終了する前に、何らかの形で完全なイベントを発生させているようです。

==編集==

混乱がないように、Jake https://github.com/mde/jakeのバージョン 0.5.16 を使用してい ます。

==編集2 ==

非同期のタスク内のタスクに関連しているように見えるため、正確な問題をより明確に示す別の例を投稿しました。

4

2 に答える 2

0

ノード 0.8 から 0.10 の間で動作の変更があるようです (バグなのか機能なのかは不明です)。0.8.14 で (async:true を使用して) 順次実行されていた Jake タスクが、0.10.x で同時に実行されるように見える

ノード 0.10 をアンインストールして、代わりに 0.8 をインストールしてみてください。

于 2013-07-15T16:55:00.420 に答える
0

同じJake(v0.5.16)でこれをローカルで実行しました。構文を修正する必要がありました。opts オブジェクトの後にコンマが必要です。コマンドをtrueコマンドにしました。これは、何かを実行するためです。

task('some_task_1', {async: true}, function () {
    console.log("|- Doing something");

    var command = "true";
    jake.exec(command, {}, function(){
        console.log("   |- Completed doing something");
        complete();
    });
});

task('some_task_2', {async: true}, function () {
    console.log("|- Doing something else");

    var command = "true";
    jake.exec(command, {}, function(){
        console.log("   |- Completed doing something else");
        complete();
    });
});

task('some_task_root', {async: true}, function () {
    var firstTask = jake.Task['some_task_1'];
    var secondTask = jake.Task['some_task_2'];

    firstTask.addListener("complete", function() { secondTask.invoke(); });
    secondTask.addListener("complete", function() { complete(); });

    firstTask.invoke();
});

変更したのはそれだけですが、あなたが説明したものではなく、正しい出力が得られました:

$ jake some_task_root
|- Doing something
   |- Completed doing something
|- Doing something else
   |- Completed doing something else

これに関する GitHub イシュー ( https://github.com/mde/jake/issues/202 ) も開いているようですので、イシューで解決しましょう。最小限の例は正しく機能するため、ビルド スクリプトに固有のものがあるはずです。もう少し詳細を調べて、整理してみましょう。:)

于 2013-07-15T17:03:26.593 に答える