【发布时间】:2013-07-02 13:00:54
【问题描述】:
我在一个主要是 javascript 的项目中测试 Jake 作为 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 ==
已经发布了另一个示例,现在应该以更清晰的方式显示确切的问题,因为它似乎与异步任务中的任务相关。
【问题讨论】:
-
谷歌搜索节点 Jake 获得了许多不同但相似的结果。您能否提供文档链接或 github 上的存储库名称。假设您正确使用该库,特别是 addListener 和调用函数,您的回调等看起来是合理的。
-
这实际上只是我几个小时前完成的一个简单的本地 jake 项目。实际项目将 typescript 文件编译为 javascript,但上面的代码是一样的。所以不幸的是没有 github 链接或任何东西......我确实先尝试了谷歌搜索,但帖子和我的问题之间没有直接关联,大多数是关于如何使用 3rd 方库进行排序构建。一切似乎对我来说都很好,只是没有像我预期的那样运行:(
标签: javascript node.js asynchronous jake