【问题标题】:Calling readStream.destroy() on a node js read stream doesn't stop the reading在节点 js 读取流上调用 readStream.destroy() 不会停止读取
【发布时间】:2021-11-19 19:56:20
【问题描述】:

希望你们一切都好。

我在 Node Js 中遇到了流问题,我想寻求您的帮助:

我正在读取一个文件: const readStream = fs.createReadStream('./veryBigFile');

然后我通过管道将输出发送到这样的 POST 请求:

readStream.pipe(post_req);

但是,我想在一定的超时后停止从文件中读取,并停止 POST 请求。

我尝试了 readStream.close() 和 readStream.destroy() 但它们不起作用(我在 readStream 上附加了一个“结束”侦听器,超时后它不会被触发)。

有什么想法吗?

【问题讨论】:

  • 我也想知道!
  • @KirillGroshkov 我刚刚在下面回答了我自己的问题。希望对您有所帮助!

标签: javascript node.js


【解决方案1】:

在您发表评论 kirill Groshkov 之后,我决定再次查看我的代码,我明白了如何让它工作!

在触发销毁事件后(使用 readStream.destroy()),它会发出一个“错误”事件,而不是我正在监听的“结束”事件。

所以我仍然不得不使用 readStream.destroy('YOUR CUSTOM ERROR MESSAGE') 在超时后停止读取文件。

然后我听了这个自定义错误:

        readStream.on('error', e => {
        if (e === 'YOUR CUSTOM ERROR MESSAGE') {
            post_req.abort(); //To cancel request
            // etc.
        } else {
            reject(`An error occured while uploading data: ${e}`);
        }
    });

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 2015-12-14
    • 2023-03-21
    • 2015-07-25
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多