Чтобы получить объект, реализующий DatabaseSync
, вам нужно вызвать openDatabaseSync(...)
вместо openDatabase(...)
. Я не знаю об iPhone или о том, какой у вас объект oDB
, но согласно спецификации вы получаете метод openDatabaseSync
только в WebWorker, а не в обычном веб-браузере window
. Безусловно, XMLHttpRequest
продемонстрировал, что синхронные операции потенциально длинной в потоке пользовательского интерфейса не очень хорошая идея.
Невозможно запустить асинхронный код синхронно или наоборот. Для этого вам потребуются функции уровня языка, такие как потоки или сопрограммы, которых нет в JavaScript. Вы должны выйти из своих функций и вернуть управление браузеру, чтобы он мог выполнить HTTP-запрос или запрос к базе данных, и перезвонить вам на обработчик, который вы ему дали.
Таким образом, вам придется переписывать свой код «наизнанку», чтобы передавать функции обратного вызова вместо ожидания возвращаемых значений каждый раз, когда вы делаете что-то, связанное с вводом-выводом базы данных.
function tellMeWhenIsStarted(oDB, callback) {
oDB.query(sql,params,function(transaction,result) {
callback(result.rows.length>0);
}
});