我正在Node.js中开发一个模块,并使用EventEmitter从发出JSON的应用程序流式传输数据。我想正确处理JSON解析错误。
示例1:使用try / catch块并将SyntaxError传递给消息事件回调
let buffer = '';
stream.on('data', data => {
buffer += data;
let boundary = buffer.indexOf('\n');
while (boundary !== -1){
const input = buffer.substring(0, boundary);
buffer = buffer.substring(boundary + 1);
try {
const json = JSON.parse(input);
this.emit('message', json);
} catch (err) {
this.emit('message', err, null);
}
boundary = buffer.indexOf('\n');
}
});
示例2:使用try / catch块并发出错误事件,将SyntaxError传递给错误事件回调
let buffer = '';
stream.on('data', data => {
buffer += data;
let boundary = buffer.indexOf('\n');
while (boundary !== -1){
const input = buffer.substring(0, boundary);
buffer = buffer.substring(boundary + 1);
try {
const json = JSON.parse(input);
this.emit('message', json);
} catch (err) {
this.emit('error', err);
}
boundary = buffer.indexOf('\n');
}
});
是否存在处理这些类型错误的首选约定?
答案 0 :(得分:0)
这两种解决方案都是可以辩护的,但就Node.js EventEmitter约定而言,我认为解决方案2更好。
如果您参考文档:https://nodejs.org/api/events.html#events_emitter_emit_eventname_args,则所有embed()args只是其他参数,与错误处理无关。
我想您必须实现一个通用的“错误”侦听器并在错误情况之间进行切换,以单独或默认处理它们。