在node js上写字符串到stdout时,如果字符串真的很长,就只写了一部分。我知道这是因为
stream.write
方法中的缓冲。为了解决这个问题,我一次写了几个字符的字符串,但我发现这不是 100% 可靠的。有时我会得到部分写入,没有错误打印到屏幕上。
起初我尝试在
process.stdout.once('drain', cb)
方法返回 false 时调用 write
,但这似乎并不总是有效。但是,它确实降低了不成功的写入率。
在某个时候,经过一个多小时的斗争,我发现如果我删除脚本末尾的
process.exit(0)
调用,就不会有失败,或者至少我看到没有人做一些测试,而我会如果我离开 process.exit
电话,尝试不到 5 次就会看到错误。
这是我的工作:
const b = JSON.stringify(response.data);
const chunk = 200;
const len = b.length;
let pos;
for (pos = 0; pos <= len; pos += chunk) {
process.stdout.write(b.substring(pos, pos + chunk));
}
console.log('B'); // This is just a test print out.
// process.exit(0);
在写入失败的情况下,最后一个“B”没有被打印出来,这让我认为这个过程甚至没有到达那一行就结束了,或者流没有机会写入它。我相信它是第二个,因为如果我将退出代码更改为其他内容,然后运行
echo $?
我会看到该退出代码。所以process.exit
被评估。
我有一个可行的解决方案,即将
process.exit
注释掉,但我想知道这样做的正确方法是什么。我觉得我的解决方案不是最优的。
另外,因为我想明确地结束这个过程,所以我在测试打印输出行之后添加了接下来的几行:
process.stdout.on('finish', () => {process.exit(0)});
process.stdout.end();
备注: