Как заставить скрипт дождаться выполнения асинхронной операции?
Всем привет.
Есть в скрипте асинхронная операция, которая выглядит так:
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, время: 06:13. |