【问题标题】:Wait after every read of a chunk of data - Node JS每次读取一大块数据后等待 - Node JS
【发布时间】:2020-04-15 11:39:19
【问题描述】:
我有以下代码:
var fs = require('fs');
var myReadStream = fs.createReadStream('readMe.txt')
myReadStream.on('data', function(data_chunk){
setTimeout(function(){
console.log('chunk read:')
console.log(data_chunk)
},2000)
})
它的作用是在开始时等待 2 秒,然后将所有块一起输出。我想要做的是每次读取和输出一个块时,我希望它在下一次读取和输出之前等待 2 秒。如何修改我的代码?
【问题讨论】:
标签:
javascript
node.js
buffer
settimeout
fs
【解决方案1】:
要控制流的流动,您可以使用.pause() & .resume()。
myReadStream.on('data', async function(data_chunk){
myReadStream.pause();
console.log('chunk read:')
console.log(data_chunk)
await new Promise(resolve => setTimeout(resolve, 2000));
myReadStream.resume()
})
您也可以改用readable 事件,并在准备好获取下一个块时调用read:
myReadStream.on('readable', async function(){
await new Promise(resolve => setTimeout(resolve, 2000));
while (null !== (chunk = myReadStream.read())) {
console.log('chunk read:')
console.log(chunk)
await new Promise(resolve => setTimeout(resolve, 2000));
}
})
当使用 readable.read() 处理数据时,while 循环是必要的。
只有在 readable.read() 返回 null 后,才会发出 'readable'。