Как правильно совместить цикл 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, время: 11:58. |