通过shell命令在Node.js中执行同步事件
您好,我正在量角器中编写通过shell命令在Node.js中执行同步事件,node.js,protractor,spawn,Node.js,Protractor,Spawn,您好,我正在量角器中编写测试,我想在conf.js中执行一些数据库恢复,我正在Node.js项目中使用Node shell命令通过spawn进行恢复 代码确实正常工作并恢复数据库。但主要的问题是它是异步工作的,主线程不会等待恢复完成 这是我的密码 var dbServer = '(local)'; var spawn = require('child_process').spawn; spawn('sqlcmd', ['-S', dbServer, '-i', '
测试,我想在conf.js
中执行一些数据库恢复,我正在Node.js
项目中使用Node shell命令
通过spawn
进行恢复
代码确实正常工作并恢复数据库。但主要的问题是它是异步工作的,主线程不会等待恢复完成
这是我的密码
var dbServer = '(local)';
var spawn = require('child_process').spawn;
spawn('sqlcmd', ['-S', dbServer, '-i', 'resources/databaseRestore.sql'] ,function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
我可以在执行任何其他工作之前等待执行此函数吗?我已经看到了require('fs')
的一些示例,但不确定如何实现它。刚刚发布的Node 0.12包含了子进程
函数的同步变体。因此,如果可以使用0.12,那么使用spawnSync()
而不是spawn()
就可以了。如果您使用此方法,请注意spawnSync不会接受回调,而是返回对象stdout
、stdin
和error
属性(以及其他属性)。有关更多详细信息,请查看
如果不选择使用节点0.12,则可以等待生成的进程退出,然后继续执行其余代码spawn()
返回一个子对象,该子对象在子进程完成时发出事件
var child = spawn(...);
child.on('exit', function(code, signal) {
//code and signal might tell you if the process was succesful.
continueWithMainLogic();
});
顺便说一句,据我所知,spawn()
命令不接受回调,因此在您的示例中,该回调函数永远不会被调用exec()
确实采用了与示例中类似的回调,在生成的进程结束后调用该回调。因此,当使用exec()
时,您可以使用该回调而不是exit-even处理程序