如果我收到stream.Readable
或stream.Writable
,例如在致电http.IncomingMessage
,fs.ReadStream
或fs.WriteStream
后,我应该假设全部< / em>事件可能会多次触发,除非文档另有说明?
我对这些问题的答案特别感兴趣:
error
事件可以多次触发吗?error
事件,还会发生哪些其他事件? (例如data
?)问题假设:
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?
}
答案 0 :(得分:1)
简短回答:是的。
答案很长:Yyyeeesss。
开玩笑......正如文档所说,The stream is not closed when the 'error' event is emitted
,所以是的,因为流在收到错误后实际上是打开的,其他一切仍然可以发生。因此,在收到错误后,您仍然会收到它可以发送的finish
或end
或whatever
事件。
通常在发生错误后调用end
事件,因为错误通常是无法读取/写入更多数据等,但不要将此作为规则假设为您的程序需要为每种情况做好准备。
如果您希望程序在100%的错误发生错误后停止读/写,则必须致电.end()
以确保结束。