Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Global rejection events completely broken in a bundled environment (eg. Webpack) #490

Open
joepie91 opened this issue Jun 7, 2016 · 0 comments

Comments

@joepie91
Copy link

joepie91 commented Jun 7, 2016

The code for initEmitRejection seems to be checking for a Node environment incorrectly:

if(typeof process !== 'undefined' && process !== null
    && typeof process.emit === 'function') {

... leading to WhenJS incorrectly concluding that bundled code is running in Node, therefore emitting its events through process.emit (which is a noop) and completely skipping window.dispatchEvent, essentially breaking the global rejection events entirely.

The following is the set of checks I'm using in my code, which appears to be more robust, and which I've found to be working in the current version of Webpack:

let isWebWorker = (typeof WorkerGlobalScope !== "undefined");
let isNode = (typeof process !== "undefined" && process.browser !== true);
let isBrowser = (!isNode && !isWebWorker && typeof document !== "undefined");

Given that the referenced shim explicitly sets process.browser to true, that seems like a better way to identify (bundled) browser environments. I'm not sure whether this property is also present in older versions.


As an aside, the code in initEmitRejection also says the following:

// Returning falsy here means to call the default
// onPotentiallyUnhandledRejection API.  This is safe even in
// browserify since process.emit always returns falsy in browserify:
// https://github.com/defunctzombie/node-process/blob/master/browser.js#L40-L46

... however, looking at the current version of that code, this seems to not be true - process.emit is a noop, which thus returns undefined, and I'm not certain that evaluates as 'falsey' from an event handling perspective.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant