Next.js:如果子进程没有任何数据要返回怎么办?

安德烈

我正在使用 Next.js 来管理系统调用。代码看起来这样(不完全是这样,但这很简单,可以说明我在做什么):

export async function find(file, searchTerm) {

    const cat = execFile('cat', [file], {maxBuffer: 1024 * 1024});
    const grep = execFile('grep', [searchTerm], {maxBuffer: 1024 * 1024});
    cat.stdout.pipe(grep.stdin);

    return new Promise((resolve, reject) => {
        grep.stdout.on('data', async (d) => {
            setTimeout(() => resolve(d.toString().trim()), 100)
        });
    });
}

注意有两个过程:

  • cat

  • grep

cat.stdout被输送到grep.stdin,当grep.stdout接收data,整个函数返回一个Promise

一切都很好。问题是,如果在从 返回的结果grep 中没有找到则不会调用for 的回调并且整个链只是挂起。searchTermcatgrep.stdout.on('data', ...

在生产中,我有一个抽象,可以让我将任意数量的进程链接在一起(从execFile上面开始)。

有没有办法检测链中是否有任何进程返回“无”,并且只沿管道发送“无”(例如空字符串)?

谢谢。

马亨德拉·苏塔尔

您可以在此处使用 on 'exit' 事件。

'exit' 事件在子进程结束后发出。如果进程退出,code为进程最终退出代码,否则为null。如果进程因收到信号而终止,则信号是信号的字符串名称,否则为空。两者之一将始终为非空。

因此,您可以在发生此事件时拒绝承诺

更多信息:https : //nodejs.org/api/child_process.html#child_process_event_exit

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章