需要做 Weex 容器内的异常监控。基于 Vue 的一些可以被监控到,但是有些错误是被 Weex 源码所捕获,比如 Promise,各位有做过的话,这类问题是如何解决的?
// 获取当前的叶子节点
function formatComponentName(vm) {
if (vm.$root === vm) return 'root';
var name = vm._isVue
? (vm.$options && vm.$options.name) ||
(vm.$options && vm.$options._componentTag)
: vm.name;
return (
(name ? 'component <' + name + '>' : 'anonymous component') +
(vm._isVue && vm.$options && vm.$options.__file
? ' at ' + (vm.$options && vm.$options.__file)
: '')
);
}
// 错误处理
Vue.config.errorHandler = (err, vm, info) => {
// logger.toServer({err, vm, info})
let componentName = 'not found';
if (vm) {
componentName = formatComponentName(vm);
}
let errorInfo = `\n------------------------weex monitor--------------------
method: errorHandler
name: ${err.name}
message: ${err.message}
callstack:${err.stack}`
console.error(`\n错误信息:${errorInfo}
发生错误的组件:${componentName}
具体信息:${info}\n`)
}
Vue.config.warnHandler = (msg, vm, trace) => {
let componentName = 'not found';
if (vm) {
componentName = formatComponentName(vm);
}
let message = `\n\nmessage:${msg} \n\ncomponent:${componentName}\n\ntrace:${trace}`;
console.error(`警告信息:${message}`)
}
App.el = '#root'
App.renderError = (h, err) => {
console.error(`renderError:${h}, ${JSON.stringify(err)}`)
}
/* eslint-disable no-new */
new Vue(App)