Javascript.RU

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

Как заставить скрипт дождаться выполнения асинхронной операции?
Всем привет.
Есть в скрипте асинхронная операция, которая выглядит так:
var db = openDatabase("stor", "1.0", "stor data");
		db.transaction(function(tx) {
			tx.executeSql(
				"CREATE TABLE IF NOT EXISTS `stor` (`key` TEXT, `data` BLOB, unique(`key`))",
				[],
				function(tx, result){
					tx.executeSql('SELECT * FROM `stor`', [], function (tx, results){
					  var len = results.rows.length, i;
					  for (i = 0; i < len; i++) {
						storage[results.rows.item(i).key] = results.rows.item(i).data;
					  }
					});
					
				},
				function(tx, error){
					
				}
			);
		});

Ниже идёт проверка наличия элементов в массиве, но когда она запускается, цикл ещё не закончен, и соответственно, идёт потеря элементов, весь остальной код даёт сбои. Как "застопорить" скрипт, пока цикл не будет пройден?
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2012, 14:00
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

1. Вариант - оформить проверку элементов в функцию и запускать ее - сразу после цикла.
2. Вариант после цикла запускать событие. Гдето в коде отлавливать это событие и запускать проверку элементов.
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2012, 16:57
Интересующийся
Отправить личное сообщение для SindBad Посмотреть профиль Найти все сообщения от SindBad
 
Регистрация: 15.03.2011
Сообщений: 11

Короче, определять перед проверкой окончание цикла. Пробовал, не подходит.
Дело в том, что проверка - это только начало, ниже будет очень много кода (заранее неизвестно, какого и сколько), включая инлайновые скрипты, и весь код зависит от результатов этой операции и результатов проверки. То есть, весь последующий javascript просто нереально запихать в условие или в обработчик.
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2012, 22:05
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

Сообщение от SindBad Посмотреть сообщение
Короче, определять перед проверкой окончание цикла.
не определять окончание цикла. А просле цикла запускать необходимые действия. У тебя сам цикл - синхронная операция.
Сообщение от SindBad Посмотреть сообщение
Дело в том, что проверка - это только начало, ниже будет очень много кода (заранее неизвестно, какого и сколько), включая инлайновые скрипты, и весь код зависит от результатов этой операции и результатов проверки. То есть, весь последующий javascript просто нереально запихать в условие или в обработчик.
Поэтому заранее нужно продумывать правильную архитектуру приложения. Вполне вероятно будут еще асинхронные вызовы, надо просто все правильно разложить по функциям.
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2012, 22:13
Интересующийся
Отправить личное сообщение для SindBad Посмотреть профиль Найти все сообщения от SindBad
 
Регистрация: 15.03.2011
Сообщений: 11

Правильно - как?
Ответить с цитированием
  #6 (permalink)  
Старый 22.04.2012, 23:56
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

Вопрос сложный и однозначного ответа нет. Для начала вам похоже стоит более подробно разобраться как работают асинхронные вызовы. Почитать про нюансы программирования в асинхронном стиле. Вобщем как делать все правильно - сказать очень сложно, зато когда неправильно увидеть проще. Вероятно что сейчас вы идете не совсем верным путем - останавливать работу приложения и ждать ответа от асинхронного вызова - не javascript - way, если можно так выразиться. Вообще можно решить вашу задачу с помощью хаков - но в будущем это может обернуться гораздо большими проблемами.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить итоговую цифру... sergiocharm Элементы интерфейса 27 26.03.2017 15:15
Как правильно написать скрипт Estrella Moretti (X)HTML/CSS 3 17.08.2011 15:45
Скрипт неработает так как нужно DoubleShot jQuery 0 23.07.2011 17:08
После выполнения операции скрипт перестает работать HETmozgov jQuery 6 04.11.2010 18:06
разное время выполнения операции ropowek Events/DOM/Window 2 08.10.2008 13:27