我正在测试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的0.5.16版本 https://github.com/mde/jake
==编辑2 ==
已经发布了另一个示例,现在应该以更清晰的方式显示确切的问题,因为它似乎与异步任务中的任务有关。
答案 0 :(得分:0)
在节点0.8到0.10之间似乎存在行为的变化(不确定它是否是错误或特征)。在0.8.14中顺序执行的jake任务(使用async:true)似乎在0.10.x中同时开始运行
尝试卸载节点0.10,然后安装0.8。
答案 1 :(得分: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),所以让我们在那里解决问题。最小的示例正常工作,因此必须有一些特定于您的构建脚本的东西。让我们获取更多细节,并尝试让您整理出来。 :)