Google Chrome, WebWorks, HTML5Database, транзакция () и оповещение - обратный вызов транзакции не вызывается - PullRequest
0 голосов
/ 26 января 2012

Мы столкнулись со странной ситуацией.Мы вызываем database.transaction(txCallback, txError, txSuccess), и если мы следуем за вызовом транзакции с помощью вызова alert(), функция txSuccess вызывается без вызова функции txCallback.

Является ли это известнымошибка или задокументированное поведение с разумным объяснением?

Похоже, это происходит только в эмуляторе Ripple и в Google Chrome (на котором основан Ripple).Это не происходит в Safari, где он работает как ожидалось, используя alert или console.log.

Этот HTML-код хорошо демонстрирует ситуацию:

<html>
<head>
<script>
function dbalert() {
  var db = window.openDatabase("test","1.0","test",1024*1024);
  console.log("Next line should read: In transaction callback");
  window.transactionCalled = false;
  db.transaction(
    function (tx) {
        console.log("In transaction callback");
        window.transactionCalled = true;
    },
    function (tx, err) {
        console.error("ERROR");
        console.log(err);
    },
    function () {
        if (window.transactionCalled) {
            console.log("Success callback: everything worked!");
        } else {
            console.error("Success callback: BUT TRANSACTION WAS NEVER CALLED");
        }
    }
  );
  /*****
   * Change to FALSE to get this working.
   *****/
  if (true) {
    alert("Ok, let's see what happened");
  } else {
    console.log("Ok, let's see what happened");
  }
}
</script>
</head>
<body onLoad="dbalert();">
<div id="out">
</div>
</body>
</html>

1 Ответ

0 голосов
/ 02 ноября 2012

Я подозреваю, что ошибка связана с синхронизацией.

Транзакции базы данных являются асинхронными, в то время как операторы предупреждений синхронны (блокируют пользовательский интерфейс), поэтому не гарантируется, что вызов транзакции завершится при выполнении оператора оповещения

, если мы следуем за вызовом транзакции вызовом alert ()

Предложить полное удаление операторов alert ().

...