捕获Promise异常并返回默认值

时间:2015-03-12 06:23:27

标签: ember.js rsvp.js

我遇到了一个问题,如果promise上发生异常,我想返回默认值。我返回的数组似乎无法正常工作。

我的路线模型挂钩

model: function() {
    return {
        menuItems : this.store.find('menuItem').catch(function(error) {
            Ember.Logger.error('Retrieving Menu Items', error);
            return [];
        }),

我的控制器模式

selectFirstMenuItem: function() {
    var model = this.get('model');

    //At this point model.menuItems is some weird object 
    //with an _id : 26, _label : undefined, _result: Array(0), _state : 1 etc. 
    //(maybe a Promise?),  the .get method throws an undefined exception.
    if(model.menuItems.get('length') > 0 ) {
        ...
    }
}.observes('model.menuItems.@each'),

1 个答案:

答案 0 :(得分:0)

您可以通过返回Ember.RSVP.hash而不是包含承诺的常规对象来完成此工作,如下所示:

App.IndexRoute = Ember.Route.extend({
  model: function() {    
    return Ember.RSVP.hash({
      menuItems: this.store.find('menuItem').then(
        function(menuItems){ return menuItems; },
        function(error) {
          Ember.Logger.error('Retrieving Menu Items', error);
          return [];
        })
    });
  }
});

然后按以下方式查看length的{​​{1}}属性:

menuItems

工作示例here