Jake任务在异步任务完成之前完成激发
Jake task firing complete before completion of async task
我正在一个主要是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中异步应该如何工作,是否有一些魔力?因为它似乎在实际完成exec之前以某种方式启动了一个完整的事件。
===编辑===
只是为了避免混淆,我使用的是Jake的0.5.16版本https://github.com/mde/jake
===编辑2===
我发布了另一个例子,现在应该以更清晰的方式显示确切的问题,因为它似乎与异步任务中的任务有关。
节点0.8到0.10之间的行为似乎发生了变化(不确定是bug还是特性)。在0.8.14中按顺序执行的Jake任务(使用async: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问题(https://github.com/mde/jake/issues/202),所以让我们在问题上解决它。最小的例子工作正常,所以您的构建脚本必须有一些特定的东西。让我们来了解更多细节,并努力让您理清头绪。:)
相关文章:
- 当使用Watchify时,Browserify+Babelify Gulp任务没有终止
- gulp Iconify任务抛出错误TypeError:Path必须是字符串.收到false
- 如果助手不在,如何从Grunt中的代码中调用任务
- WinJS(WP8.1):从后台任务更新辅助磁贴
- 如何使用gump任务将html转换为javascript字符串
- 在等待异步任务时永久循环
- 如何在dhtmlxgantt中保存任务
- 如何为requirejs和qunit设置grunt任务
- 如何使gullow任务跨平台.尤其是吞咽贝壳
- 不使用Grunt.initConfig()注册Grunt任务
- Grunt任务没有加载,获得无限循环
- 用咕哝的任务改变恒定的角度内容
- Gulp Git首先运行提交任务,然后运行推送任务
- 如何在jshint任务运行且一切正常时记录消息
- 如何按顺序运行gullow任务
- 嵌套两个以上任务的回调
- 如何在另一个任务中正确使用延迟的gump任务返回的值
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- Jake任务在异步任务完成之前完成激发
- Node.js和Jake -如何在任务中同步调用系统命令