Node.js和Jake -如何在任务中同步调用系统命令
Node.js and Jake - How to call system commands synchronously within a task?
Jake任务执行长时间运行的系统命令。另一个任务取决于在开始前第一个任务是否完全完成。'child_process'的'exec'函数异步执行系统命令,使得在第一个任务完成之前启动第二个任务成为可能。
写Jakefile以确保第一个任务中长时间运行的系统命令在第二个任务开始之前完成的最干净的方法是什么?我想过在第一个任务结束时在一个虚拟循环中使用轮询,但这听起来很糟糕。看来一定有更好的办法。我看到过这个SO问题,但它并没有完全解决我的问题。
var exec = require('child_process').exec;
desc('first task');
task('first', [], function(params) {
exec('long running system command');
});
desc('second task');
task('second', ['first'], function(params) {
// do something dependent on the completion of 'first' task
});
通过重读Matthew Eernisse的帖子,我找到了自己问题的答案。对于那些想知道怎么做的人:
var exec = require('child_process').exec;
desc('first task');
task('first', [], function(params) {
exec('long running system command', function() {
complete();
});
}, true); // this prevents task from exiting until complete() is called
desc('second task');
task('second', ['first'], function(params) {
// do something dependent on the completion of 'first' task
});
仅供将来参考,我有一个没有其他依赖项的同步执行模块。
- https://npmjs.org/package/allsync
的例子:
var allsync = require("allsync");
allsync.exec( "find /", function(data){
process.stdout.write(data);
});
console.log("Done!");
在上面的示例中,Done
只在之后打印, find
进程存在。exec
函数基本上是阻塞直到完成。
相关文章:
- 在控制器和数据对象之间同步数据
- 同步调用,直到用户通过angular验证为访问者
- javascript函数同步
- 当使用Watchify时,Browserify+Babelify Gulp任务没有终止
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- gulp Iconify任务抛出错误TypeError:Path必须是字符串.收到false
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 如果助手不在,如何从Grunt中的代码中调用任务
- WinJS(WP8.1):从后台任务更新辅助磁贴
- 如何使用Grunt异步运行2同步任务
- 一个 Gulp 任务中的多个同步流
- 使用 $.queue() 按顺序(顺序)提供同步和异步任务
- Gulp任务不同步工作
- 使Gulp任务同步,而不创建一堆其他任务
- 如何将对象传递给 gulp 任务以便能够同步运行该任务
- Node.js异步任务是同步处理的吗?
- 在进行下一个任务之前,让gullow同步写入文件
- 浏览器同步+ Gulp +翡翠,为什么分开翡翠手表任务
- Node.js和Jake -如何在任务中同步调用系统命令