gpt4 book ai didi

javascript - Node.js "built-in"流会发出多个错误吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:26 26 4
gpt4 key购买 nike

如果我得到 stream.Readablestream.Writable ,例如调用http.IncomingMessage后, fs.ReadStreamfs.WriteStream ,我是否应该假设所有事件都可能触发多次,除非文档另有说明?

我对这些问题的答案特别感兴趣:

  1. error 事件可以多次触发吗?
  2. 如果发出 error 事件,还会发生哪些其他事件? (例如数据?)

问题假设:

  • error 事件被捕获并且不会抛出。
  • 未使用第三方库。

代码示例

var options = {
method: 'GET',
host: 'localhost',
path: '/',
};

require('http').get(options, function(response) {
// ...

response.on('end', callback);
response.on('error', callback);

// ...
});

function callback() {
// Can this function be called multiple times?
}
<小时/>
var s = require('fs').createReadStream('/path/to/file');

s.on('end', callback);
s.on('error', callback);

function callback() {
// Can this function be called multiple times?
}
<小时/>
var s = require('fs').createWriteStream('/path/to/file');

s.on('finish', callback);
s.on('error', callback);

function callback() {
// Can this function be called multiple times?
}

最佳答案

简短回答:是的。

长答案:Yyyeeesss。

开个玩笑...正如文档所说,发出“错误”事件时流不会关闭,所以是的,因为流在​​收到错误后实际上是打开的,其他一切都可以仍然会发生。因此,在收到错误后,您仍然会收到 finishend 或它可能抛出的 whatever 事件。

通常在发生错误后调用 end 事件,因为通常错误是关于无法读取/写入更多数据等,但不要将此视为规则您的程序需要为每种情况做好准备。

如果您希望程序在 100% 的错误后停止读/写,则必须调用 .end() 以确保结束发生。

关于javascript - Node.js "built-in"流会发出多个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37900222/

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