我使用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),则拒绝处理程序调用。但是处理程序的参数似乎没有错误信息。我如何知道拒绝处理程序中的错误原因?
服务器返回的错误处理尚未在ember数据中完全实现。作为参考,正如在这篇关于会员数据的博客文章中所说:
我们希望让错误处理以及处理客户端和服务器冲突变得坚如磐石。Paul Chavard的pull请求目前是开放的,看起来是错误处理的一个坚实起点。在不久的将来,你应该会看到这方面的更多发展。
但同时,你可以采取一些变通措施来获取这些信息。
例如:
Ember.RSVP.configure('onerror', function(error) {
console.log(error.message);
console.log(error.stack);
});
或者使用肮脏的黑客获取这些信息。由于ember数据在后台使用jQuery,您可以订阅ajaxError
:
$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
// this will trigger anytime there is an error
});
希望能有所帮助。
您也可以覆盖这个:
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) {
}
以防服务器中发生了导致错误的事情。我只是看到你想处理承诺中的错误,好吧,这是我没有处理过的不同之处。因为可能会触发Error。
更新:
我刚刚发现了一些有趣的东西,可能会对你有所帮助:Ember数据处理401多亏了新路由器,我还没有机会使用所有这些新功能,但它们看起来很酷。