cocos creator 原生平台下,Promise异常未处理

2020-03-02  本文已影响0人  正向反馈
// cocos 使用(promise.min.js)[https://github.com/taylorhakes/promise-polyfill], 对于未处理的rejection,默认是不处理的
// 这里捕获未处理的rejection,并抛出异常
;(Promise as any)._unhandledRejectionFn = function(rejectError) {
     throw rejectError
};

修正

android下,js引擎自带了Promise, 所以实际使用的是js引擎的Promise,这个是Native Code.
web标准下window有事件可以处理未处理的rejection

window.addEvent('unhandledrejection', (rejection) => {})

firefox, chrome下都可以正常运行。
但是!chrome下在dev-tool下执行的Promise.reject并不会触发该事件。
经查stackoverflow (https://stackoverflow.com/questions/40026381/unhandledrejection-not-working-in-chrome)[https://stackoverflow.com/questions/40026381/unhandledrejection-not-working-in-chrome]发现,大概是跟chrome的同源策略有关。
chrome的同源策略执行严格。

原生平台下可能也是这个原因,但没有查出具体的问题和解决方法。期望有知道的网友可以指出。

那最终,怎么处理这个问题呢?

有个取巧的方案, 就是使用promise-polyfill替换标准的Promise对象。

上一篇下一篇

猜你喜欢

热点阅读