WebSQL和Javascript操作顺序

时间:2012-07-30 18:26:17

标签: javascript web-sql

我的应用程序正在使用javascript webSQL,我遇到了命令执行顺序的一些问题。无论我的代码在查询中的顺序是什么,最后执行。例如,在下面的代码中,2将在1之前被警告:

db.transaction(
        function (transaction) {
        transaction.executeSql(
        'SELECT * FROM contacts WHERE id = ?;',
        [id],
        function (transaction, result) {
           alert("1");
           if (result.rows.length != 0) {
            user = result.rows.item(0).name;
           } else {}
        },
        errorHandler);
    });

alert("2");
message = id + '%1E' + name;

为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:1)

你什么时候警告(“2”),你还没有完成交易,所以你传递给它的第二个功能还没有被调用。因为它是我假设的success处理程序,所以在事务成功完成后将调用它。第三个参数是查询失败时要执行的代码片段,仅当它失败时才会执行。

当页面加载了足够的内容来执行javascript时,会执行事件处理程序代码之外的任何内容。请注意,整个页面无需加载即可执行alert("2"),只需足够的JS。由于这些语句非常接近,因此在达到并执行警报(“2”)语句之前,事务将完全有机会完成。

但是,如果在alert("2")和db.transaction(...)之间有足够的代码,则可以(在所谓的竞争条件中)可以执行回调在警报(2)代码之前。

在这种情况下,您需要小心使用事件处理程序,尽管这取决于您的成功处理程序的作用。如果它修改了页面DOM,那么我强烈建议将db.transaction()和周围的代码包装在绑定到页面加载的事件处理程序中。

答案 1 :(得分:-1)

这不是你问题的答案,但我想我应该给你一个关于webSQL的警告。

截至2010年11月18日,W3C已宣布已弃用Web SQL数据库推荐草案,不再维护它。

因此,虽然目前它可能在浏览器中运行,但我不会在将来依赖它。