node-amqp icon indicating copy to clipboard operation
node-amqp copied to clipboard

error on a "ready" event handler raises an empty "error" event

Open jfromaniello opened this issue 10 years ago • 1 comments

This caused me some headache:

connection.on('ready', function () {
 //something goes wrong here
 throw new Error('something wrong');
}).on('error', function (err) {
 //an error event is emitted and
 //"err" is undefined here.
});

I can work a patch for this, I think it must not emit an error event in this case. Just bubble up the error.

jfromaniello avatar Apr 24 '14 20:04 jfromaniello

This happens because the ready events and optional ready callback are executed in the same stack as the parser's onMethod. The parser is wrapped by a try/catch block, catching any exceptions from this stack, including the user's event listeners and readyCallback.

If you want to let your program crash, a workaround for now would be to disable reconnect in the options, and avoid listening on any 'error' events. Of course the downside is that since errors between module and user functions are not distinguished, you would lose all graceful error control.

To address the actual issue, we need to differentiate between an exception originating from a user function vs exceptions from the parser. We could invoke the user functions inside their own try/catch and ideally bind them to process.domain if existent. If not, we could re-throw the exception.

TheDeveloper avatar May 10 '14 11:05 TheDeveloper