Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.01.2017, 15:40
Новичок на форуме
Отправить личное сообщение для vell174 Посмотреть профиль Найти все сообщения от vell174
 
Регистрация: 29.01.2017
Сообщений: 2

Как правильно совместить цикл 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
Ответить с цитированием
  #2 (permalink)  
Старый 29.01.2017, 17:21
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

vell174,
что ты подразумеваешь под словом "каша" ?
Ответить с цитированием
  #3 (permalink)  
Старый 29.01.2017, 18:16
Новичок на форуме
Отправить личное сообщение для vell174 Посмотреть профиль Найти все сообщения от vell174
 
Регистрация: 29.01.2017
Сообщений: 2

Решил данную проблему сам.. Сделал следущие каму интересно.

Создаем фабрику:

.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);
});
Ответить с цитированием
  #4 (permalink)  
Старый 29.01.2017, 18:26
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Эммм, ну хорошо.

На самом деле тут все можно решить в 5 строчек, составлением из $rootScope.core_save_http[1] массива промисов и пробросом его в Promise.all. Ну или в $q.all().then()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как подчинить себе цикл wreder jQuery 16 20.11.2013 22:17
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как правильно прицепить обработку события slowklg Events/DOM/Window 6 15.03.2012 16:20
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14