首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态下的吞咽式阅读响应

状态下的吞咽式阅读响应
EN

Stack Overflow用户
提问于 2020-12-28 19:44:30
回答 1查看 50关注 0票数 0

我想我不明白gulp-git是如何工作的。我希望能够检查是否有未实现的更改,然后根据结果运行额外的代码,但是得到了一些奇怪的结果,请参见注释中的值:

代码语言:javascript
复制
let results = '';
git.status({ args: '--porcelain' }, (err, stdout) => {
    results = stdout;
    console.log(stdout.length); // 26
});
console.log(results.length);  // 0

如何从status调用中获取内容,返回只返回一个Stream就会出现。

编辑:

基于Marco的回答,我做了以下工作,但是,不要认为我对文档的理解是正确的:

代码语言:javascript
复制
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);
        });

上述产出:

代码语言:javascript
复制
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

还不太明白

代码语言:javascript
复制
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}`);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-28 21:10:31

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

我看了git源代码,git.status使用了child_process.exec函数。奇怪的是

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

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

如果你需要的话,你可以通知整个电话。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65483196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档