Как заставить скрипт дождаться выполнения асинхронной операции?
Всем привет.
Есть в скрипте асинхронная операция, которая выглядит так: 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){ } ); }); Ниже идёт проверка наличия элементов в массиве, но когда она запускается, цикл ещё не закончен, и соответственно, идёт потеря элементов, весь остальной код даёт сбои. Как "застопорить" скрипт, пока цикл не будет пройден? |
1. Вариант - оформить проверку элементов в функцию и запускать ее - сразу после цикла.
2. Вариант после цикла запускать событие. Гдето в коде отлавливать это событие и запускать проверку элементов. |
Короче, определять перед проверкой окончание цикла. Пробовал, не подходит.
Дело в том, что проверка - это только начало, ниже будет очень много кода (заранее неизвестно, какого и сколько), включая инлайновые скрипты, и весь код зависит от результатов этой операции и результатов проверки. То есть, весь последующий javascript просто нереально запихать в условие или в обработчик. |
Цитата:
Цитата:
|
Правильно - как?
|
Вопрос сложный и однозначного ответа нет. Для начала вам похоже стоит более подробно разобраться как работают асинхронные вызовы. Почитать про нюансы программирования в асинхронном стиле. Вобщем как делать все правильно - сказать очень сложно, зато когда неправильно увидеть проще. Вероятно что сейчас вы идете не совсем верным путем - останавливать работу приложения и ждать ответа от асинхронного вызова - не javascript - way, если можно так выразиться. Вообще можно решить вашу задачу с помощью хаков - но в будущем это может обернуться гораздо большими проблемами.
|
Часовой пояс GMT +3, время: 21:56. |