Html5 WebSql транзакция ведет себя странно с предупреждением - PullRequest
1 голос
/ 23 июня 2011

Транзакция WebSql ведет себя странно, когда я помещаю некоторые предупреждения в код.У меня есть три транзакции.Это t1, t2 и t3.

Следующий код работает отлично, как и ожидалось.

 var db = openDatabase('DBTest', "1.0", "Example DB", "200000");
    db.transaction(function(tx) {
        alert('Tranasction.1........');
        jQuery('body').append('<h1>Added a h1 by t1</h1>');
    });
    db.transaction(function(tx) {
        alert('Tranasction.2........');
        jQuery('body').append('<h1>Added a h1 by t2</h1>');
    });
    db.transaction(function(tx) {
        alert('Transaction.3.........');
        jQuery('body').append('<h1>Added a h1 by t3</h1>');
    });

Но, когда я вставляю оператор предупреждения перед выполнением транзакции.Вещи не работают, как ожидалось.

Например.Если я поставлю предупреждение («Предупреждение перед транзакцией t3»);

Код после изменения выглядит следующим образом:

var db = openDatabase('DBTest', "1.0", "Example DB", "200000");
    db.transaction(function(tx) {
        alert('Tranasction.1........');
        jQuery('body').append('<h1>Added a h1 by t1</h1>');
    });
    db.transaction(function(tx) {
        alert('Tranasction.2........');
        jQuery('body').append('<h1>Added a h1 by t2</h1>');
    });
    //THIS ALERT IS ADDED
    alert('An alert just before transaction t3');
    db.transaction(function(tx) {
        alert('Transaction.3.........');
        jQuery('body').append('<h1>Added a h1 by t3</h1>');
    });

Изменение поведения после изменений: первые две транзакции не происходят.

Это ожидаемое поведение.Если да, то как это оправдано?

1 Ответ

0 голосов
/ 12 апреля 2012

Код, который вы здесь используете, работает как положено в Chrome. Я только что открыл инструменты разработчика и вставил ваш код в консоль и увидел, что все три транзакции созданы.

Помните, что вызовы функций db.transaction являются асинхронными, поэтому они будут возвращаться немедленно, но не обязательно будут вызывать обратные вызовы, которые вы передадите, до тех пор, пока они фактически не создадут транзакции.

Вот порядок исполнения, я думаю, что происходит:

OpenDatabase (...)

db.transaction # 1 (начинает создавать транзакцию, немедленно возвращается)

db.transaction # 2 (begin ...)

предупреждение отображается перед транзакцией 3

db.transaction # 3 (begin ...)

обратный вызов db.transaction # 1 (транзакция оповещения 1)

обратный вызов db.transaction # 2 (транзакция оповещения 2)

обратный вызов db.transaction # 3 (транзакция оповещения 3)

...