Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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
Javascript Meteor.\u wrapAsync和节点子进程_Javascript_Meteor_Asynccallback - Fatal编程技术网

Javascript Meteor.\u wrapAsync和节点子进程

Javascript Meteor.\u wrapAsync和节点子进程,javascript,meteor,asynccallback,Javascript,Meteor,Asynccallback,我试图从Meteor环境中的child_进程命令中获得结果。 似乎在child_过程中有一些特殊的东西,我不明白。 下面是我用于测试的代码 Meteor.startup(function () { exec = Npm.require('child_process').exec; }); function bind_environment_callback(error) { console.log('Error binding environment for a callbac

我试图从Meteor环境中的child_进程命令中获得结果。 似乎在child_过程中有一些特殊的东西,我不明白。 下面是我用于测试的代码

Meteor.startup(function () {
    exec = Npm.require('child_process').exec;
});

function bind_environment_callback(error) {
    console.log('Error binding environment for a callback', error.stack);
}

function get_git_commit_hash(cb) {
    exec( 
        'git rev-parse HEAD',
        Meteor.bindEnvironment(
            function(error, stdout, stderr) {
                if (error) {
                    cb('Error retrieving commit hash', null);
                } else {
                    console.log("Inside get_git_commit_hash:" + stdout.slice(0,stdout-1).toString());
                    cb(null, stdout.slice(0,stdout-1).toString());
                }
            },
            bind_environment_callback
        )
    );
}

function dummy(cb){
    setTimeout(function(){
        cb(null, 'Dummy result');
    },
    100);
}

Meteor.methods({
    test: function() {
        var get_git_commit_hash_sync = Meteor._wrapAsync(get_git_commit_hash);
        var result= get_git_commit_hash_sync();
        console.log('Call 1:' + result);

        var dummy_sync = Meteor._wrapAsync(dummy);
        result= dummy_sync();
        console.log('Call 2:' + result);
    }
});
在浏览器中运行Meteor.call('test')时,我在控制台中看到以下输出:

Inside get_git_commit_hash:d53ffc7f5db26c6e2b40bfcce7a1e2e0d6610ece
Call 1:
Call 2:Dummy result

有人能帮我理解为什么我第一次打电话时没有得到结果吗?

我不确定这是否有效,但请尝试一下:

runCmd = Meteor.wrapAsync(exec)

var result = runCmd("git rev-parse HEAD");

console.log(result);
然后,您可以处理后的结果。还要注意,您已经执行了
stdout-1
,对于正在运行的命令,它应该始终返回
NaN
,而不是数字

更新


Meteor.\u wrapAsync现在是Meteor.wrapAsync

我不确定这是否有效,但请尝试一下:

runCmd = Meteor.wrapAsync(exec)

var result = runCmd("git rev-parse HEAD");

console.log(result);
然后,您可以处理后的结果。还要注意,您已经执行了
stdout-1
,对于正在运行的命令,它应该始终返回
NaN
,而不是数字

更新


Meteor.\u wrapAsync现在是Meteor.wrapAsync

谢谢Akshat,child\u进程没有问题。这是一个标准的1型打字错误。它应该是stdout.length-1。当然,你的方法也很有效。谢谢阿克沙,这不是儿童教育过程中的问题。这是一个标准的1型打字错误。它应该是stdout.length-1。当然,你的方法也有效。