Javascript Jake任务触发在异步任务完成之前完成
我正在测试Jake,作为Rake的一个可能替代者,它主要是一个javascript项目。现在我发现一件奇怪的事情是,完成事件在事件完成之前被触发 以下是一个例子:Javascript Jake任务触发在异步任务完成之前完成,javascript,node.js,asynchronous,jake,Javascript,Node.js,Asynchronous,Jake,我正在测试Jake,作为Rake的一个可能替代者,它主要是一个javascript项目。现在我发现一件奇怪的事情是,完成事件在事件完成之前被触发 以下是一个例子: task('some_task_1', {async: true}, function () { console.log("|- Doing something"); var execCallback = function() { console.log(" |- Done something");
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中异步应该如何工作有什么神奇之处吗?因为它似乎在实际完成exec之前以某种方式触发了一个完整的事件
==编辑==
我使用的是Jake的0.5.16版本,这样就不会产生任何混乱
==编辑2==
已经发布了另一个示例,该示例现在应该以更清晰的方式显示确切的问题,因为它似乎与异步任务中的任务相关。节点0.8到0.10之间的行为似乎发生了变化(不确定是错误还是功能)。Jake任务在0.8.14中按顺序执行(异步:true),在0.10.x中似乎开始并发运行
尝试卸载节点0.10,改为安装0.8。我刚刚用同一个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问题,所以让我们在那里解决这个问题。最简单的示例工作正常,因此构建脚本中必须有特定的内容。让我们了解更多的细节,并尝试将您整理出来。:) 谷歌搜索节点Jake得到了许多不同但相似的结果。您可以在github上提供文档链接或存储库名称吗。假设您正确地使用了库,尤其是addListener,并像人们所认为的那样调用函数,那么您的回调和类似的调用看起来是合理的。这实际上只是我几个小时前完成的一个简单的本地jake项目。实际项目将typescript文件编译为javascript,但上面的代码完全相同。所以不幸的是,没有github链接或任何东西。。。我确实先尝试过谷歌搜索,但这些帖子和我的问题之间没有直接的联系,大多数都是关于如何使用第三方libs进行有序构建的。对我来说一切都很好,只是没有像我预期的那样运行:(我正在运行节点v0.10.12,最小的示例工作正常。我已经用一个更清晰的示例更新了这个问题,它展示了其他计算机上的行为,如果你有时间,我可以让你检查一下。