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对象。