Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过shell命令在Node.js中执行同步事件_Node.js_Protractor_Spawn - Fatal编程技术网

通过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处理程序