gpt4 book ai didi

node.js - Nodejs exec子进程标准输出未获取所有 block

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:51 24 4
gpt4 key购买 nike

我正在尝试从我的子进程发送消息来维护我的进程,但某些 block 未发送,可能是因为文件太大。

主要流程:

let response = ''
let error = ''
await new Promise(resolve => {
const p = exec(command)
p.stdout.on('data', data => {
// this gets triggered many times because the html string is big and gets split up
response += data
})
p.stderr.on('data', data => {
error += data
})
p.on('exit', resolve)
})
console.log(response)

子进程:

// only fetch 1 page, then quit
const bigHtmlString = await fetchHtmlString(url)
process.stdout.write(bigHtmlString)

我知道子进程可以工作,因为当我直接运行它时,我可以在控制台中看到文件的末尾。但是当我运行主进程时,我看不到文件末尾。它很大,所以我不确定到底缺少哪些 block 。

编辑:还有一个新的未知问题。当我在子进程末尾添加等待时,它不会等待,而是关闭。所以我猜它会以某种方式崩溃?即使使用 p.on('error', console.log) 我也没有看到任何错误示例:

const bigHtmlString = await fetchHtmlString(url)
process.stdout.write(bigHtmlString)
// this never gets executed, the process closes. The wait works if I launch the child process directly
await new Promise(resolve => setTimeout(resolve, 1000000))

最佳答案

process.stdout.write(...) 返回 true/false 取决于它是否写入了字符串。如果返回 false,您可以对 drain 事件进行 Listen() 以确保其完成。

类似这样的事情:

const bigHtmlString = await fetchHtmlString(url);
const wrote = process.stdout.write(bigHtmlString);

if (!wrote){
// this effectively means "wait for this
// event to fire", but it doesn't block everything
process.stdout.on('drain', ...doSomethingHere)
}

关于node.js - Nodejs exec子进程标准输出未获取所有 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58073810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com