2012-12-03 2 views
1

Я сделал некоторый код, чтобы проверить, является ли значение в базе данных нулевым или нет.Код не выполняется правильно в первый раз. В следующий раз это

Вот мой код:

var tabel; 
var running = false; 
function CheckRunning(tabel){ 
this.tabel = "tabel"+tabel+""; 
var db = window.openDatabase(this.tabel, "1.0", this.tabel, 1000000); 
db.transaction(checkrunningDB, checkerrorCB); 
console.log(this.running); 
return this.running; 
} 

function checkrunningDB(tx) { 
    tx.executeSql('SELECT max(id), sluttime FROM '+this.tabel, [], checkrunningSuccess, checkerrorCB); 
} 

function checkrunningSuccess(tx, results) { 
    if (results.rows.item(0).sluttime != null){ 
     this.running = false; 
    } else{ 
     this.running = true; 
    } 
} 
function checkerrorCB(err) { 
    this.running = false; 
    console.log(err); 
} 

Так я сделал функциональную кнопку, прогоны это CheckRunning().

Когда я нажимаю его, я получаю это (каждая строка представляет собой нажатие кнопки):

false 
true 
true 
true 
true 
+0

Если у вас есть следующий вопрос, лучше спросить новый, а не менять название существующего. – Dennis

ответ

3

Ваши функции базы данных работают асинхронно. Обратный вызов, checkrunningSuccess, будет запущен, когда он будет завершен, но после db.transaction(checkrunningDB, checkerrorCB); может выполняться строка.

+0

Спасибо за ваш комментарий. имеет большой смысл. Какие-то конкретные решения моей проблемы? Можно ли запустить его синхронно? Я хотел бы иметь возможность сделать это: 'if (CheckRunning ('something')) {// сделать что-то}' –

+0

Невозможно или рекомендуется - большинство веб-API разрабатываются с помощью событий или асинхронно. Функция «openDatabaseSync» доступна для веб-работников, но поскольку они уже представляют собой фоновые задачи, блокировка транзакции базы данных не приведет к замораживанию браузера. – Dennis

+0

Это приложение для телефона (телефонная задержка). Могу ли я показать экран загрузки или что-то еще? –

Смежные вопросы