Node.js and Jake - How to call system commands synchronously within a task?

只愿长相守 提交于 2019-12-04 12:24:56

问题


A Jake task executes a long-running system command. Another task depends on the first task being completely finished before starting. The 'exec' function of 'child_process' executes system commands asynchronously, making it possible to for the second task to begin before the first task is complete.

What's the cleanest way to write the Jakefile to ensure that the long-running system command in the first task finishes before the second task starts?

I've thought about using polling in a dummy loop at the end of the first task, but this just smells bad. It seems like there must be a better way. I've seen this SO question, but it doesn't quite address my question.

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
});

回答1:


I found the answer to my own question by re-rereading Matthew Eernisse's post. For those wondering how to do it:

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
});



回答2:


Just for future reference, I have a synchronous exec module with no other dependencies.

  • https://npmjs.org/package/allsync

Example:

var allsync = require("allsync");
allsync.exec( "find /", function(data){
    process.stdout.write(data);
});
console.log("Done!");

In the above exampale, Done is only printed after the find process exists. The exec function essentially blocks until complete.



来源:https://stackoverflow.com/questions/6755819/node-js-and-jake-how-to-call-system-commands-synchronously-within-a-task

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!