账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    nodejs 中的Stream流如何复制使用呢
    51
    0

    比如下面的代码
    stream 在使用后就会被消费掉,但是我想多次操作这个stream,该怎么解决呢,我下面的代码是通过fs方式再次获得,但是io太过于频繁了

     const stream = await ctx.getFileStream();
          const fs = require('fs');
          const qhash = '123123';
          // 写文件
          await new Promise(resolve =>
            stream
              .pipe(fs.createWriteStream(`upload/${qhash}.zip`))
              .on('finish', resolve));
          getManifest(`upload/${qhash}.zip`);
          const stream2 = await fs.createReadStream(`upload/${qhash}.zip`);
          const sssssshash = await qetag(stream2);
          const stream3 = await fs.createReadStream(`upload/${qhash}.zip`);
          // console.log(buffer);
    
       
    3
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 惆怅的一颗心 普通会员 1楼

      在Node.js中,Stream流是通过Promise和流式API实现的,可以用来处理事件,如读取文件、网络请求等。要复制Stream流,你需要使用Promise.all()方法。以下是一个简单的例子:

      ```javascript const fs = require('fs'); const stream = fs.createReadStream('file.txt');

      stream.on('data', (chunk) => { console.log(chunk); });

      stream.on('end', () => { console.log('Stream has ended'); });

      stream.on('error', (err) => { console.error(err); });

      const promises = [stream];

      Promise.all(promises) .then(() => { console.log('All promises have resolved'); }) .catch((err) => { console.error(err); }); ```

      在这个例子中,我们首先创建了一个读取文件的Stream流。然后,我们添加了data和end事件监听器,当有新的数据从文件读取流中读取时,数据处理器会被调用。最后,我们添加了error事件监听器,当读取流遇到错误时,错误处理器会被调用。

      然后,我们使用Promise.all()方法来等待所有Promise都 resolve。如果所有的Promise都 resolve,那么所有的数据处理器都会被调用,最后console.log()会打印出"All promises have resolved"。

      注意,Promise.all()方法会阻塞,直到所有Promise都 resolve。如果你希望在所有Promise都 resolve后立即继续执行,你可以使用Promise.race()方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部