forked from codesandbox/codesandbox-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathunhandledRejection.js
More file actions
56 lines (50 loc) · 1.5 KB
/
unhandledRejection.js
File metadata and controls
56 lines (50 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
/* @flow */
let boundRejectionHandler = null;
type ErrorCallback = (error: Error) => void;
function rejectionHandler(
callback: ErrorCallback,
e: PromiseRejectionEvent
): void {
if (e == null || e.reason == null) {
return callback(new Error('Unknown'));
}
const { reason } = e;
if (reason instanceof Error) {
return callback(reason);
}
// A non-error was rejected, we don't have a trace :(
// Look in your browser's devtools for more information
return callback(new Error(reason));
}
function registerUnhandledRejection(
target: EventTarget,
callback: ErrorCallback
) {
if (boundRejectionHandler !== null) {
// Always add the listener, in case we rewrote the window
// $FlowFixMe
target.addEventListener('unhandledrejection', boundRejectionHandler);
return;
}
boundRejectionHandler = rejectionHandler.bind(undefined, callback);
}
function unregisterUnhandledRejection(target: EventTarget) {
if (boundRejectionHandler === null) {
return;
}
// $FlowFixMe
target.removeEventListener('unhandledrejection', boundRejectionHandler);
boundRejectionHandler = null;
}
export {
registerUnhandledRejection as register,
unregisterUnhandledRejection as unregister,
};