繁体   English   中英

WebSQL和Javascript的操作顺序

[英]WebSQL and Javascript Order of Operation

我的应用程序使用的是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;

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

当您发出alert(“ 2”)时,您尚未完成交易,因此传递给它的第二个函数没有被调用。 由于它是我假设的success处理程序,因此将在事务成功完成后调用它。 第三个参数将是查询失败时(仅在查询失败时)执行的代码段。

当页面加载了足以执行javascript的内容时,将执行事件处理程序代码之外的所有内容。 请注意,整个页面无需加载即可执行alert("2") ,仅够使用JS。 由于这些语句彼此靠近,因此在到达并执行alert(“ 2”)语句之前,交易完成的可能性基本上为0。

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

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

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

截至2010年11月18日,W3C已宣布他们已弃用Web SQL数据库建议草案,并将不再维护它。

因此,尽管目前它可以在浏览器中运行,但将来我将不再依赖它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM