Ember-在闭包动作中返回嵌套promise的响应

时间:2018-02-26 13:48:38

标签: javascript ember.js

使用下面的模式,我可以使用闭包动作将路径中的保存操作的结果返回给组件。这很好。

路线

actions: {
    submit: function(values) {
      var user = this.store.createRecord('user', values);
      return user.save();
    },
  }

组件

this.attrs.submit(values).then((response) => {
  //Handle success
}).catch(error => {
  //Handle error
});

在我的提交操作中,我想首先获取用户所属的许可对象,然后在保存之前在用户对象上设置该对象,如下所示。

问题是return user.save();现在处于查询操作的回调中,并且没有从提交操作返回。

如何重构我的代码以便查询许可证记录,然后将user.save()的结果返回给我的组件?

submit: function(values) {
  var user = this.store.createRecord('user', values);
  this.get('store').query('license', {
    filter: {
      code: values.licenseCode
    }
  }).then(function(licenses) {
    var license = licenses.get("firstObject");
    user.set('license', license);
    return user.save();
  });
},

1 个答案:

答案 0 :(得分:0)

无需重组。获取回调结果的then method already does this magic。你只需要回复它给你的承诺:

submit: function(values) {
  var user = this.store.createRecord('user', values);
  return this.get('store').query('license', {
//^^^^^^
    filter: {
      code: values.licenseCode
    }
  }).then(function(licenses) {
//  ^^^^^
    var license = licenses.get("firstObject");
    user.set('license', license);
    return user.save();
//  ^^^^^^
  });
},