Node.js 从status读取git响应
我想我不明白吞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 如何从状态
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)