優雅な処理vueプロジェクトの異常実戦記録
背景あなたはまだユニカートの処理に悩んでいますか? は異常捕獲のためにtry catchを繰り返していますか? はまだ各プロのためにcatchを書いていますか? 時はワンストップで異常を解決!!vueプロジェクトに対して)
グローバル異常獲得
vueの核心的なソースコードの分析
ソースを読むことによって、Vue.co.fig.error Handlerインタフェースがどのように使用者に露出されているかを確認してください。
同期異常処理方案
以下はグローバル処理の異常な完全コードです。もうプラグインになりました。
グローバル異常処理を追加すると、コードのロバスト性を向上させる 崩壊を減らす 快速位置決めbug 資料の参考 github.com/vuejs/vue/b… cn.vuejs.org/v 2/api/嚔er… 締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。
グローバル異常獲得
Vue.config.errorHandler = function (err, vm, info) {
// 。 , Vue 。
// handle error
// `info` Vue ,
// 2.2.0+
}
注意:異常処理に対して、同期異常と非同期異常は別々に扱うべきです。vueの核心的なソースコードの分析
ソースを読むことによって、Vue.co.fig.error Handlerインタフェースがどのように使用者に露出されているかを確認してください。
同期異常処理方案
// , Vue.config.errorHandler, , vue 。
function globalHandleError(err, vm, info) {
if (Vue.config.errorHandler) {
try {
return config.errorHandler.call(null, err, vm, info)
} catch (e) {
logError(e, null, 'config.errorHandler');
}
}
logError(err, vm, info);
}
try {
// vue try , globalHandleError
} catch (e) {
globalHandleError(e, vm, ' ');
}
非同期異常処理方案
// , promise catch
function invokeWithErrorHandling(
handler,
context,
args,
vm,
info
) {
var res;
try {
res = args ? handler.apply(context, args) : handler.call(context);
if (res && !res._isVue && isPromise(res) && !res._handled) {
res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
// promise Promise.prototype.catch() 。
res._handled = true;
}
} catch (e) {
handleError(e, vm, info);
}
return res
}
//
function callHook(vm, hook) {
var handlers = vm.$options[hook];
//
var info = hook + " hook";
if (handlers) {
for (var i = 0, j = handlers.length; i < j; i++) {
invokeWithErrorHandling(handlers[i], vm, null, vm, info);
}
}
}
知識がのびる
// vue , , , promise catch
Vue.mixin({
beforeCreate() {
const methods = this.$options.methods || {}
Object.keys(methods).forEach(key => {
let fn = methods[key]
this.$options.methods[key] = function (...args) {
let ret = fn.apply(this, args)
if (ret && typeof ret.then === 'function' && typeof ret.catch === "function") {
return ret.catch(Vue.config.errorHandler)
} else { //
return ret
}
}
})
}
})
完全コード以下はグローバル処理の異常な完全コードです。もうプラグインになりました。
errorPlugin.js
/**
*
* @param {
* } error
* @param {*} vm
*/
const errorHandler = (error, vm, info) => {
console.error(' ')
console.error(vm)
console.error(error)
console.error(info)
}
let GlobalError = {
install: (Vue, options) => {
/**
*
* @param {
* } error
* @param {*} vm
*/
Vue.config.errorHandler = errorHandler
Vue.mixin({
beforeCreate() {
const methods = this.$options.methods || {}
Object.keys(methods).forEach(key => {
let fn = methods[key]
this.$options.methods[key] = function (...args) {
let ret = fn.apply(this, args)
if (ret && typeof ret.then === 'function' && typeof ret.catch === "function") {
return ret.catch(errorHandler)
} else { //
return ret
}
}
})
}
})
Vue.prototype.$throw = errorHandler
}
}
export default GlobalError
使用
//
import ErrorPlugin from './errorPlugin'
import Vue from 'vue'
Vue.use(ErrorPlugin)
最後に書くグローバル異常処理を追加すると、
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。