Как инициировать действие `ошибка` * вне * перехода

#ember.js #error-handling

#ember.js #обработка ошибок

Вопрос:

Я хочу реализовать некоторую согласованную обработку ошибок в моем приложении с помощью error действия. Проблема, с которой я столкнулся, заключается в том, что она запускается только тогда, когда возникает исключение во время перехода, а не, например, при простом saveModelInResponseToUserClick действии на маршруте.

Я могу как-то заставить что-то работать со следующим, но это взлом:

 Ember.onerror = function(error) {
  MyApp.__container__.lookup('router:main').send('handleError')
}
  

При этом у меня могла бы быть другая логика обработки ошибок в маршрутах с разными вложениями.

РЕДАКТИРОВАТЬ: Другая проблема с использованием описанного выше метода заключается в том, что ошибка возникает до того, как приложение полностью перешло на свой первый маршрут — в этом случае возникает другое исключение, и все взрывается.

Есть ли другой подход, который я могу использовать с этим?

Ответ №1:

Как вы сказали, действие ошибки будет срабатывать только во время перехода.

Для ошибок, которые могут возникнуть в результате действия, вы могли бы попробовать использовать следующее:

 Ember.RSVP.on('error', function(error) {

// handle error

}
  

Это позволит перехватить ЛЮБУЮ ошибку, возникающую в результате обещания в вашем приложении. Вы можете получить доступ к объекту «ошибка» внутри функции, который предоставит вам некоторую информацию о том, что именно пошло не так, в частности, атрибут «responseText». Сам код отправляется в ваш app.js файл.

Документы Ember по этому поводу: http://emberjs.com/guides/understanding-ember/debugging/#toc_errors-within-an-code-rsvp-promise-code