gpt4 book ai didi

javascript - 有没有办法真正暂停 readline?

转载 作者:行者123 更新时间:2023-11-30 15:35:49 25 4
gpt4 key购买 nike

考虑以下代码、输入文件和结果。这里的 setTimeout 是为了模仿外部调用,例如 http get。保持结果有序的最佳/简单方法是什么?明显增加的延迟和不并发运行是可以的。 rl.pause() 和 rl.resume() 没有解决问题,可能是因为它暂停了下划线输入流,或者我在这里遗漏了什么?

'use strict';

let rl = require('readline').createInterface({
input: require('fs').createReadStream('inputFile')
});

rl.on('line', line => {
rl.pause();
setTimeout(_ => {
console.log(line);
rl.resume();
}, Math.random() * 2000);
});

输入文件:

1
2
3
4
5
6
7
8
9
10
11
12

结果:

10
6
1
11
3
7
8
9
12
2
5
4

最佳答案

这是 readline 模块在 NodeJS 中的工作方式的限制。它暂停读取输入但不会立即这样做。这部分是因为 Node 流的设计目的。

pauseresume 旨在处理背压 - 这意味着他们的目标是处理“太快”以至于消费者无法跟上的生产者为了平衡 Node 。它们从未在保证事物立即暂停的背景下设计。

您可以改用较低级别的 fs 操作并逐行读取行或将它们存储在缓冲区中以克服此问题。如果文件足够小 - 只需对其执行 fs.readFile 并按 \n 拆分可能就足以用 promises 迭代它并执行异步操作。

关于javascript - 有没有办法真正暂停 readline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41556863/

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