我正在测试 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 ==
发布了另一个示例,该示例现在应该以更清晰的方式显示确切的问题,因为它似乎与异步任务中的任务有关。