Как правильно совместить цикл for с "then(function(){})"
Здравствуйте, помогите как совместить цикл for с then.
Нужно вытащить из базы данных IndexDB с разными ключами, и совместить их в один массив но проблема в том что цикл идет и не дожидается ответа и получается каша. Вот код:
var i=0,
len=$rootScope.core_save_http[1].length;
for(; i < len; i++) {
$localForage.getItem(''+$rootScope.core_save_http[1][i][0]+'').then(function(data) {
$rootScope.core_save_http[1][i][1]=data;
});
}
Использую AngularJS 1.6 |
vell174,
что ты подразумеваешь под словом "каша" ? |
Решил данную проблему сам.. Сделал следущие каму интересно.
Создаем фабрику:
.factory('core_https_push', ['$rootScope', '$q', '$localForage', function ($rootScope, $q, $localForage) {
return {
get : function (param,id_http,index_select) {
var deferred = $q.defer();
function myLoop(i) {
if(i==-1)
{
return deferred.resolve(true);
}
$localForage.getItem($rootScope.core_save_http[1][i][0]).then(function(data) {
$rootScope.core_save_http[1][i][1]=data;
return myLoop(i-=1);
});
}
myLoop($rootScope.core_save_http[1].length-1);
return deferred.promise;
}
}
}
])
Вызываем функцию из контроллера:
core_https_push.get().then(function(promes) {
alert(promes);
});
|
Эммм, ну хорошо.
На самом деле тут все можно решить в 5 строчек, составлением из $rootScope.core_save_http[1] массива промисов и пробросом его в Promise.all. Ну или в $q.all().then() |
| Часовой пояс GMT +3, время: 10:31. |