2015-04-20 2 views
1

Перебор объектов в CoffeScript Я хочу, чтобы вычислить и отобразить определенное значение для каждой записи (количество активов в бассейне)Присвоить возвращаемое значение обещания итератора (AngularJS)

функции

Контроллера:

archivedBidParts = [] 
for day in BidService.activeDays(bid) when DateService.isBetween(day, from, to, true, true) 
    splitBidPart = angular.copy(bid_part) 
    splitBidPart.hours = BidService.hoursActiveOnDay(day, bid) 
    splitBidPart.number_of_assets_in_pool = number_of_assets_in_pool(bid) 
    archivedBidParts.push(splitBidPart) 
$scope.data.splitBidParts = sort(archivedBidParts) 
функция

Помощник:

number_of_assets_in_pool = (bid) -> 
    Pool.query().$promise.then(pool_memberships.bind(null, bid)).then((pool) -> pool.pool_memberships.length) 

вид:

<tr ng-repeat="bid_part in data.splitBidParts"> 
... 
    <td ng-hide="bid_part.holidayName">{{ bid_part.number_of_assets_in_pool }}</td> 

Задача: Вспомогательная функция возвращает обещание. При попытке console.log возвращаемое значение внутри обещания (в последнем .then() - statement) правое число будет распечатано в консоли.

У кого-нибудь есть идея, как правильно использовать возвращаемое значение?

Заранее спасибо

+0

Благодарим вас обоих за ваши ответы. Я только что обновил свой вопрос в отношении комментария @zayquan, что экземпляры splitBidPart теряются после каждого цикла. Они фактически собираются в массиве и затем присваиваются области. –

ответ

0

Я думаю, вы должны изменить следующую строку в контроллере

splitBidPart.number_of_assets_in_pool = number_of_assets_in_pool(bid) 

Чтобы что-то вроде этого:

number_of_assets_in_pool(bid).then(function(retval) { 
    splitBidPart.number_of_assets_in_pool = retval; 
}); 
+0

Спасибо @ mark-veenstra. Это выглядело как хорошее решение. В результате я получаю только отображение номера в одной из строк, а не в каждой строке. Любые другие идеи? Еще раз спасибо .. –

0

Для примера можно назначить на splitBidPart объект в решении обещания.

Если вам нужно знать, когда все обещания будут разрешены, вам необходимо будет их собрать, а затем разрешить их с помощью вызова $q.all() (обратите внимание, что это может быть дорогостоящим, если есть много обещаний).

Обратите внимание, что в приведенном ниже примере все экземпляры splitBidPart теряются после завершения цикла, так что это не отдельный отдельный пример.

Обратите также внимание на то, что вы должны указать $q, введя его в контроллер. promises = [] for day in BidService.activeDays(bid) when DateService.isBetween(day, from, to, true, true) splitBidPart = angular.copy(bid_part) splitBidPart.hours = BidService.hoursActiveOnDay(day, bid) number_of_assets_in_pool(bid).then (theAnswer) -> splitBidPart.number_of_assets_in_pool = theAnswer $q.all(promises).then -> console.log "all the promises are resolved"

Обратите внимание, что в некоторых случаях Угловой может разумно справляться с обещаниями, и он «просто сработает». Хотелось бы сформулировать этот последний пункт, но не может действительно не копаться в документах.

0

Сохраняет ли функция сортировки привязку? Можете ли вы попробовать, что происходит, если не учитывать этот вид?

+0

Спасибо @manuel .. Результат остается тем же .. только одно значение отображается для одного элемента и изменяется по мере загрузки других элементов. –