2015-03-10 4 views
0

Как мне разрешить окончательную сумму после того, как она прошла через каждый продукт?Как вернуть сумму после прохождения каждого продукта?

В настоящий момент return sum; возвращается 0. Который я могу понять, потому что this.get('product') - async.

Нужно ли использовать RSVP? Или другой подход?

subtotalInCents: function() { 
    var sum = 0; 

    this.get('items').forEach(function(item) { 
     item.get('product').then(function(product){ 
     sum += item.get('count') * product.get('amountInCents'); 
     console.log(sum); 
     }); 
    }); 

    return sum; 
    }.property('[email protected]'), 
+0

Вы можете поделиться своим console.log? – Nikos

+0

@Nikos 'console.log' выводит правильные значения. то есть '21371',' 35767' и т. д. –

ответ

0

Используйте наблюдателя вместо этого.

subtotalInCents: 0, 

didItemsChange: function() { 
    var that = this; 
    var items = this.get('items');  
    var itemCount = items.get('length'); 
    var sum = 0; 

    items.forEach(function(item) { 
     item.get('product').then(function(product){ 
     sum += item.get('count') * product.get('amountInCents'); 
     itemCount--; 
     if (itemCount === 0) { 
      that.set('subtotalInCents', sum); 
     }; 
     }); 
    }); 

    }.observes('[email protected]') 
+0

Мне любопытно, почему вы решили использовать наблюдателя, а не вычисленное свойство? Не может ли это быть сделано с использованием вычисленного свойства? –

+0

Я чувствовал, что путь наблюдателя более прост. Вы также можете вернуть обещание, которое может обрабатывать шаблон. Я попробую это через некоторое время или вы также можете попробовать. – kushdilip

+0

Это хорошее решение, без сомнения. Я также заинтригован, чтобы узнать, как это можно сделать с помощью вычисленного свойства –

Смежные вопросы