我怎么知道promise的拒绝处理程序中的错误原因?

时间:2013-08-27 06:00:08

标签: ember.js

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

2 个答案:

答案 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感谢新路由器,我没有机会使用所有这些新功能,但它们看起来很酷。