Skip to content

Commit

Permalink
Merge pull request #1822 from didi/feat-polyfill-UnhandledRejection
Browse files Browse the repository at this point in the history
feat: onUnhandledRejection 支持core-js promise polyfill
  • Loading branch information
hiyuki authored Jan 17, 2025
2 parents 4c7e190 + 36ec118 commit 62b48fe
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 10 deletions.
28 changes: 19 additions & 9 deletions packages/core/src/platform/env/index.ios.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { isFunction, isNumber, isString } from '@mpxjs/utils'
import { createI18n } from '../builtInMixins/i18nMixin'

export function init (Mpx) {
Expand Down Expand Up @@ -30,21 +31,30 @@ function initGlobalErrorHandling () {
})
}

function onUnhandledRejection (event) {
if (global.__mpxAppCbs && global.__mpxAppCbs.rejection && global.__mpxAppCbs.rejection.length) {
global.__mpxAppCbs.rejection.forEach((cb) => {
cb(event)
})
} else {
console.warn(`UNHANDLED PROMISE REJECTION ${(isNumber(event.id) || isString(event.id)) ? '(id:' + event.id + ')' : ''}: ${event.reason}\n`)
}
}
const rejectionTrackingOptions = {
allRejections: true,
onUnhandled (id, error) {
if (global.__mpxAppCbs && global.__mpxAppCbs.rejection && global.__mpxAppCbs.rejection.length) {
global.__mpxAppCbs.rejection.forEach((cb) => {
cb(error, id)
})
} else {
console.warn(`UNHANDLED PROMISE REJECTION (id: ${id}): ${error}\n`)
}
onUnhandledRejection({ id, reason: error, promise: null })
}
}

if (global?.HermesInternal?.hasPromise?.()) {
global.HermesInternal?.enablePromiseRejectionTracker?.(rejectionTrackingOptions)
// 支持 core-js promise polyfill
const oldOnUnhandledRejection = global.onunhandledrejection
global.onunhandledrejection = function onunhandledrejection (event) {
onUnhandledRejection(event)
isFunction(oldOnUnhandledRejection) && oldOnUnhandledRejection.call(this, event)
}
if (global.HermesInternal?.hasPromise?.()) {
global.HermesInternal.enablePromiseRejectionTracker?.(rejectionTrackingOptions)
} else {
require('promise/setimmediate/rejection-tracking').enable(rejectionTrackingOptions)
}
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/platform/env/index.web.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ function initGlobalErrorHandling () {
window.addEventListener('unhandledrejection', (event) => {
if (global.__mpxAppCbs && global.__mpxAppCbs.rejection && global.__mpxAppCbs.rejection.length) {
global.__mpxAppCbs.rejection.forEach((cb) => {
cb(event.reason, event.promise)
cb(event)
})
} else {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}\n`)
Expand Down

0 comments on commit 62b48fe

Please sign in to comment.