Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Node.js 从status读取git响应_Node.js_Git - Fatal编程技术网

Node.js 从status读取git响应

Node.js 从status读取git响应,node.js,git,Node.js,Git,我想我不明白吞git是如何工作的。我希望能够检查是否有未限制的更改,然后根据结果运行其他代码,但是得到一些奇怪的结果,请查看注释中的值: let results = ''; git.status({ args: '--porcelain' }, (err, stdout) => { results = stdout; console.log(stdout.length); // 26 }); console.log(results.length); // 0 如何从状态

我想我不明白吞git是如何工作的。我希望能够检查是否有未限制的更改,然后根据结果运行其他代码,但是得到一些奇怪的结果,请查看注释中的值:

let results = '';
git.status({ args: '--porcelain' }, (err, stdout) => {
    results = stdout;
    console.log(stdout.length); // 26
});
console.log(results.length);  // 0
如何从
状态
回调中获取内容,return只返回一个

编辑: 根据Marco的回答,我做了以下工作,但我认为我没有正确理解文档:

async getStatus() {
        const { stdout } = await git.status({ args: '--porcelain' });
        console.log(stdout);
    }
    pull() {
        process.chdir(`${this.localURL}/${this.code}`);
        this.getStatus().then(data => {
            console.log(data);
        });
上述产出:

Socket {
  connecting: false,
  _hadError: false,
  _handle:
   Pipe {
     onread: [Function: onStreamRead],
     reading: true,
     [Symbol(owner)]: [Circular] },
  _parent: null,
  ...
undefined
[21:49:26] git status --porcelain
A  templates/dsdasdas.tpl

编辑2 我还没弄明白

getStatus() {
        util.promisify(git.status({ args: '--porcelain' }));
    }

    async pull() {
        process.chdir(`${this.localURL}/${this.code}`);

        let status = await this.getStatus().stdout.on('data', function (data) {
            return data;
        });
        console.log(`status: ${status}`);

这行
console.log(results.length);//0
仍然是指第一行
结果
,它的
长度实际上等于0。
正如您现在可以想象的那样,问题在于作为第二个参数传递的函数是回调函数

我查看了GulpGit源代码,并使用了
child\u process.exec
函数。奇怪的是

与exec(3)POSIX系统调用不同,child_process.exec()不替换现有进程,而是使用shell来执行命令

因此,您的
git status
命令实际上是在另一个shell中执行的,这就是为什么
git.status
函数在被调用后立即返回,但将您指定的回调函数传递给
child\u process.exec
函数的原因

如果你需要的话,你可以答应整个电话

git.status
的源代码。
exec的文档

请查看更新的问题管理,以解决问题,谢谢!不客气。顺便说一句,我说的“您可以提示整个调用”的意思是,您可以像这样包装
util.promisify(git.status)
而不是侦听
data
事件。这会自动用承诺包装返回的
exec
。是的,我刚刚注意到我没有完全正确的那部分。类似这样的
让promisifiedGitStatus=util.promisify(git.status)