2

我使用 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),则会调用拒绝处理程序。但似乎 handler 的参数没有错误信息。我如何知道拒绝处理程序中的错误原因?

4

2 回答 2

2

对服务器返回的错误的处理尚未在 ember 数据中完全实现。作为参考,如这篇关于 ember-data的博客文章所述:

我们希望使错误处理以及客户端和服务器冲突的处理坚如磐石。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
});

希望能帮助到你。

于 2013-08-27T07:41:10.470 回答
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) {
}

那是为了以防服务器中发生导致错误的事情。我刚刚看到你想处理 Promise 上的错误,嗯,这是我没有处理过的不同的东西。becomeError 可能会被解雇。

更新:

我刚刚发现了一些有趣的东西,可能会对您有所帮助:Ember-Data 处理 401多亏了新路由器,我还没有机会使用所有这些新功能,但它们看起来很酷。

于 2013-08-27T14:49:29.623 回答