Как реализовать глобальную обработку ошибок в Vue - PullRequest
0 голосов
/ 29 августа 2018

Я хочу иметь глобальную обработку ошибок в Vue.JS, например, систему обработки ошибок в Angular 2+. Я так много пытался, но не смог найти хороший подход для реализации этой обработки.

Представьте, что у вас есть много методов службы, и что эти методы должны запускаться один за другим (я имею в виду друг в друге), поэтому написание тогда и метод catch внутри службы prevoius настолько уродлив и нечист, и теперь я ищу чистый способ реализовать таким образом. Я надеюсь, вы понимаете, о чем я.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Как уже упоминал @Badgy, вы можете установить обработчик ошибок Vue, чтобы перехватывать ошибки, возникающие в Vue. Это можно сделать следующим образом:

 Vue.config.errorHandler = function (err, vm, info) {
   // handle error
   // `info` is a Vue-specific error info, e.g. which lifecycle hook
   // the error was found in. Only available in 2.2.0+
 }

Приведенный выше код может быть расположен где угодно в вашем javascript. Я нахожу код непосредственно перед тем, как создать свой экземпляр VUE. перед моим var app = new Vue({...}); кодом. Поскольку это глобальный обработчик ошибок vue, он будет обрабатывать ошибки всех экземпляров vue, а также компонентов vue. Я обнаружил, что на практике он в основном перехватывает ошибки, возникающие в методах визуализации vue.

Подробнее об этом вы можете прочитать в официальных документах здесь: https://vuejs.org/v2/api/#errorHandler

Для более общих (не связанных с vue) ошибок javascript вам по-прежнему нужен глобальный обработчик ошибок, например:

 window.onerror = function (msg, url, line, col, error) {
     //code to handle or report error goes here
 }

Опять же, этот код может быть размещен везде, где разрешен javascript, но, как правило, вы захотите поместить его для раннего запуска в стеке javascript. Подробнее об этом вы можете прочитать здесь: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror

И, наконец, чтобы поймать «Отклонение обещания» (т. Е. Выброс исключения из функции Promise), нам нужно прослушивать события unhandledrejection, поскольку отклонение Promise не перехватывается механизмом window.onerror (благодаря @Blauhirn за подсказку). В некоторых браузерах (в настоящее время Chrome и Edge) отклонения Promise можно обнаружить с помощью следующего подхода:

 window.addEventListener('unhandledrejection', function(event) {
     //handle error here
     //event.promise contains the promise object
     //event.reason contains the reason for the rejection
 });

Для получения дополнительной информации см. Этот вопрос StackOverflow: Поймайте все необработанные отклонения обещания JavaScript

0 голосов
/ 29 августа 2018

Надеюсь, я понял ваш вопрос правильно, но это может быть то, что вы ищете.

errorCaptured

Тип: (ошибка: ошибка, vm: компонент, информация: строка) =>? Boolean

Подробности: Вызывается, когда ошибка любого компонента-потомка захватили. Хук получает три аргумента: ошибка, компонент экземпляр, вызвавший ошибку, и строка, содержащая информацию на том, где была зафиксирована ошибка. Крюк может вернуть ложь, чтобы остановить ошибка при дальнейшем распространении.

Более подробная информация об этом. Будьте осторожны, его Vue 2.5.0 +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...