Description
Hi folks. Interested in feedback on some experimental promises with deferred rejection. Has this been considered as a solution?
The pattern is you create promises with rejection deferred: if they're rejected without a reject handler it will be postponed for later delivery. If a reject handler is added later the rejection is delivered. At the point when you expect your process to have handled the promise, you end the deferral which delivers any still-pending rejections as unhandled.
This makes it the responsibility of the programmer to specify when a rejection is considered unhandled. If you have a use for asynchronously-attached handlers you can do that without the engine getting in the way and without breaking other code by changing global behavior. But you don't completely lose error reporting because you still deliver anything unexpected at the end. You create little pockets of time where asynchronous attachment is valid.
There's a working implementation here. Usage and implementation are simple. It subclasses native Promises:
https://github.com/icysailor/promise-deferred-rejection
const { PromiseDeferredRejection } = require('./promise-deferred-rejection');
let resolve, reject;
const promise = new PromiseDeferredRejection((res,rej)=>{
resolve = res;
reject = rej;
});
reject('Rejected!'); // No unhandled rejection
setTimeout(()=>{
promise.catch(reason=>{
console.log('Handling rejection with reason: '+reason);
});
},5000); // Rejection handled 5 seconds later
setTimeout(()=>{
promise.release();
},8000); // Always end deferral in case normal process fails
@MicahZoltu @vkarpov15 Would this work for the advanced use cases you guys have mentioned?
Relevant to the discussion in #6 nodejs/node#830 nodejs/promises#26 https://gist.github.com/benjamingr/0237932cee84712951a2