EmberJS中的上下文RSVP onerror处理程序

时间:2014-01-31 03:20:06

标签: ember.js ember-data rsvp.js

我正在我的EmberJS应用程序中实现错误记录,正如here所描述的那样,并且它运行良好。唯一让我失望的部分是如何正确处理来自Ember RSVP onerror事件的错误调用。

Ember运行循环中产生的错误使用messagestack属性进行了很好的格式化,但是从RSVP引发的错误会返回标准的XHR响应而没有其他上下文。是否可以访问有关发生此错误时正在执行的Ajax调用的任何信息?

我使用的是Ember 1.3.1和Ember Data 1.0.0 + b6。

1 个答案:

答案 0 :(得分:0)

我正在使用一种肮脏的解决方法来从RSVP内部获取上下文。您可以覆盖RVSP.Promise._onerror方法并包含一些数据。 'this'对象有_label属性,其中包含有关模型的有用信息。 我的解决方案仍然不理想,但它确实存在。

#RSVP _onerror hack
#put this before creating application
oldMethod = Em.RSVP.Promise.prototype._onerror
Em.RSVP.Promise.prototype._onerror = (reason) ->
  reason.label = this._label
  oldMethod(reason)

App = Ember.Application.create(options)

几乎没有改进的代码来挂钩标准的onerror方法

 Ember.RSVP.configure('onerror', (error) ->
   #handle situation when user in other tab logout from application.
   if error.status == 401 #not authorized
     window.location = '/login'
   else
     niceError = unless error.stack
       message = {
         label: error.label,
         status: error.status,
         statusText: error.statusText,
         state: error.state(),
         readyState: error.readyState,
         responseText: error.responseText.replace(/<(?:.|\n)*?>/gm, '').substr(0,100)
       }
       new Error(Ember.inspect(message))
     else
       error

 #here is method to send notification about error
 MessageApp.errorHandler('RSVP', niceError)