Я пытаюсь вызвать функцию поиска петли внутри цикла for, передавая значение из итерации в функцию loopback. Основная проблема кода может быть представлена в следующем:Strongloop prom inside loop
for (var a = 0; a < $scope.countries.length; a++) {
$scope.getEmFacPurElec($scope.countries[a], 'ton/kWh', 'CO2e').then(function(result) {
emFacPurElecToUse = $scope.emFacPurElecs;
}
А вот функция вызывается:
$scope.getEmFacPurElec = function (country, unit, ghgType) {
var defer = $q.defer();
$scope.emFacPurElecs = [];
$scope.emFacPurElecs = Country.emFacPurElecs({
id: country.id,
filter: {
where: {
and: [
{unit: unit},
{ghgType: ghgType}
]
}
}
});
defer.resolve('Success getEmFacPurElec');
return defer.promise;
};
Проблема заключается в том, что функция замыкания на себя обещание называется, а затем вернулся неопределенными, который означает, что он переходит к следующей итерации цикла for, прежде чем получить значение для присвоения emFacPurElecToUse. Мне нужно сделать еще несколько расчетов с этой переменной для этой страны, прежде чем переехать в следующую страну.
Я рассмотрел использование $ q.all в качестве возможного решения, а также используя array.map в соответствии с http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html (ошибка Rookie # 2: WTF, как использовать forEach() с обещаниями?), Но я просто не могу выяснить, как собрать все это вместе, чтобы заставить его работать. Должен ли я использовать forEach вместо этого?
Я также видел эту ссылку angular $q, How to chain multiple promises within and after a for-loop (наряду с другими подобными), но у меня нет нескольких обещаний, которые мне нужно обрабатывать внутри цикла for. Мне нужно получить значение одной emFacPurElecs для этой страны, выполнить некоторую работу с ней, а затем перейти к следующей стране. Я чувствую, что я близок, но я просто не могу понять, как я буду кодировать эту конкретную функциональность. Любая помощь приветствуется.
Если вы в конечном итоге думать о замене Q с другой библиотекой обещает в Угловом, вы можете рассмотреть https://github.com/mattlewis92/angular-bluebird-promises, поскольку это то, что я использовал для использования метода 'map()' bluebird для usecase, аналогичного тому, который вы описали. Ссылка: http://bluebirdjs.com/docs/api/promise.map.html – pulkitsinghal