From 31280e75b42b9b40ef20ea42ab0103c4248bd881 Mon Sep 17 00:00:00 2001 From: mackwang Date: Fri, 17 Jan 2025 17:26:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20onUnhandledRejection=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81core-js=20promise=20polyfill?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/platform/env/index.ios.js | 23 ++++++++++++--------- packages/core/src/platform/env/index.web.js | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/core/src/platform/env/index.ios.js b/packages/core/src/platform/env/index.ios.js index dcf86e3cb6..af2b1c6281 100644 --- a/packages/core/src/platform/env/index.ios.js +++ b/packages/core/src/platform/env/index.ios.js @@ -1,3 +1,4 @@ +import { isNumber, isString } from '@mpxjs/utils' import { createI18n } from '../builtInMixins/i18nMixin' export function init (Mpx) { @@ -30,25 +31,27 @@ 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) ? '(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 }) } } // 支持 core-js promise polyfill const oldOnUnhandledRejection = global.onunhandledrejection global.onunhandledrejection = function onunhandledrejection (event) { - // event = { promise, reason } - rejectionTrackingOptions.onUnhandled(null, event.reason) - oldOnUnhandledRejection.apply(this, event) + onUnhandledRejection(event) + oldOnUnhandledRejection.call(this, event) } if (global?.HermesInternal?.hasPromise?.()) { global.HermesInternal.enablePromiseRejectionTracker?.(rejectionTrackingOptions) diff --git a/packages/core/src/platform/env/index.web.js b/packages/core/src/platform/env/index.web.js index 58dccf2d03..39794f020e 100644 --- a/packages/core/src/platform/env/index.web.js +++ b/packages/core/src/platform/env/index.web.js @@ -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`)