【问题标题】: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'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 2019-01-02
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2023-04-06
      • 2023-04-09
      相关资源
      最近更新 更多