1

我正在测试 Jake 作为主要 javascript 项目中 Rake 的可能替代品。现在我发现一件奇怪的事情是在事件完成之前触发了完成事件。

这是一个例子:

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 中异步应该如何工作有什么魔力吗?因为它似乎在实际完成执行之前以某种方式触发了一个完整的事件。

== 编辑 ==

就这样没有混淆我使用的是 Jake 的 0.5.16 版本 https://github.com/mde/jake

== 编辑 2 ==

发布了另一个示例,该示例现在应该以更清晰的方式显示确切的问题,因为它似乎与异步任务中的任务有关。

4

2 回答 2

0

节点 0.8 到 0.10 之间的行为似乎发生了变化(不确定是错误还是功能)。在 0.8.14 中按顺序执行的 Jake 任务(使用 async:true)似乎在 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 回答