0

我正在使用 Ember Data 并尝试创建一个计算属性,该属性等于商店中应用了各自折扣的所有产品的总和。我是承诺链的新手,我相信这是我如何格式化链的问题。

export default DS.Model.extend({
title: DS.attr('string'),
storeProducts: DS.hasMany('storeProduct',{async:true}),
totalStoreValue:function(){  
 store.get('storeProducts').then(function(storeProducts){ //async call 1
   return storeProducts.reduce(function(previousValue, storeProduct){ //begin sum
     return storeProduct.get('product').then(function(product){ //async call 2
       let price = product.get('price');
       let discount = storeProduct.get('discount');
       return previousValue + (price * discount);
     });
   },0);
 }).then(function(result){ //
   return result;
 });
}.property('storeProducts.@each.product'),

任何帮助和建议将不胜感激。

4

1 回答 1

1

在计算总数之前用于Ember.RSVP.all解决您的承诺列表:

store.get('storeProducts').then((storeProducts) => { //async call 1
  return Ember.RSVP.all(storeProducts.map(storeProduct => {
    return storeProduct.get('product').then((product) => { //async call 2
      let price = product.get('price');
      let discount = storeProduct.get('discount');
      return price * discount;
    });
  }));
}).then(function(result){ //
  return result.reduce((prev, curr) => {
    return prev+curr;
  }, 0);
});
于 2016-04-16T00:05:19.450 回答