我使用下面的find方法编写了一些代码。 适配器是RESTAdapter。
App.SessionManager = Em.Object.extend({
userIdChanged: function() {
App.User.find(this.get('userid')).then(
function(user) {
/* process something */
},
function(error) {
/* rejection handler */
/* I want to know what error returned by the server here.*/
/* but how? */
}
);
}.observes('userid'),
});
如果我的服务器返回了一些错误(例如401),则拒绝处理程序被调用。 但似乎处理程序的参数没有错误信息。 我怎么知道拒绝处理程序中的错误原因?
答案 0 :(得分:2)
服务器返回的错误的处理尚未在ember数据中完全实现。 供参考,如this blog post中关于余烬数据所述:
我们希望使错误处理和处理客户端和服务器冲突坚如磐石。 Paul Chavard的拉取请求目前处于打开状态,看起来像是错误处理的坚实起点。你应该在不久的将来看到更多的发展。
但是,您可以采取一些解决方法来同时获取这些信息。
例如:
Ember.RSVP.configure('onerror', function(error) {
console.log(error.message);
console.log(error.stack);
});
或使用脏黑客获取该信息。由于ember-data使用jQuery,您可以订阅ajaxError
:
$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
// this will trigger anytime there is an error
});
希望它有所帮助。
答案 1 :(得分:0)
你也可以覆盖这个:
becameInvalid: function(record) {
// you can get errors just by doing record.errors, error keys must match
// the name of a field that you have defined in your model
}
和
becameError: function(record) {
}
如果服务器中发生了导致错误的事情。我只是看到你想要处理承诺上的错误,那就是我没有处理过的不同之处。可能会触发becomeError。
更新:
我发现了一些可能对您有所帮助的有趣内容:Ember-Data handling 401’s感谢新路由器,我没有机会使用所有这些新功能,但它们看起来很酷。