我有这个代码从concat
方法抛出错误:
request.on('end', function (chunk) {
body = Buffer.concat(body).toString();
});
我希望收到有关错误的通知,因此我添加了一个列表器:
request.on('error', function (error) {
var e = error;
})
但它没有被触发。为什么?如何在不使用error
的情况下使用try/catch
事件收听?
这不是关于我为什么会收到错误的问题,这是如何使用error
事件来抓住它的问题
答案 0 :(得分:3)
它不会触发,因为触发error
的事件是request
对象的内部事件而你的问题在另一个范围内。
您可以在调用try
时使用catch
/ Buffer.concat
request.on('end', function (chunk) {
try {
body = Buffer.concat(body).toString();
} catch (e) {
// do something with "e"
}
});
答案 1 :(得分:2)
我认为最终,归结为这样的事情:
request.on('end', function() {
try {
body = Buffer.concat(body).toString();
} catch(e) {
request.emit('error', e);
}
});
当然,您可以为此创建一个包装器:
function wrap(fn) {
return function() {
try {
return fn.apply(this, arguments);
} catch(e) {
this.emit('error', e);
}
}
}
request.on('end', wrap(function() {
body = Buffer.concat(body).toString();
}));
答案 2 :(得分:1)
我至少知道这适用于request
包 - 它当然值得测试,看它是否也适用于本机节点包。让我知道!
request
.on('end', function (chunk) {
try {
body = Buffer.concat(body).toString();
}
catch(e) {
this.emit('error', e);
}
})
.on('error', function (chunk) {
console.log('failed on chunk: %s', chunk);
})