我正在我的EmberJS应用程序中实现错误记录,正如here所描述的那样,并且它运行良好。唯一让我失望的部分是如何正确处理来自Ember RSVP onerror
事件的错误调用。
Ember运行循环中产生的错误使用message
和stack
属性进行了很好的格式化,但是从RSVP引发的错误会返回标准的XHR响应而没有其他上下文。是否可以访问有关发生此错误时正在执行的Ajax调用的任何信息?
我使用的是Ember 1.3.1和Ember Data 1.0.0 + b6。
答案 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)