WebSQL和Javascript操作顺序

WebSQL and Javascript Order of Operation

本文关键字:顺序 操作 Javascript WebSQL      更新时间:2024-04-30

我的应用程序正在使用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"),您还没有完成事务,所以您传递给它的第二个函数还没有被调用。由于我认为它是success处理程序,所以它将在事务成功完成后被调用。第三个参数是查询失败时要执行的代码片段,仅当查询失败时执行。

当页面加载了足够的内容来执行javascript时,就会执行事件处理程序代码之外的任何内容。请注意,执行alert("2")不需要加载整个页面,只需加载足够的JS即可。由于这些语句非常接近,在到达并执行警报("2")语句之前,事务完成的可能性基本为零。

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

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

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

截至2010年11月18日,W3C已经宣布他们已经否决了Web SQL数据库推荐草案,并将不再维护它

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