javascript - WebSQL 和 Javascript 的操作顺序

标签 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”),你还没有完成交易,所以你传递给它的第二个函数还没有被调用。由于我假设它是成功处理程序,因此它将在事务成功完成后被调用。第三个参数是查询失败时要执行的代码片段(仅当查询失败时)。

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

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

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

关于javascript - WebSQL 和 Javascript 的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11727341/

相关文章:

javascript - Expressjs - 如何为每个请求获取 '/' 路由?

javascript - 无法从 express.js 加载静态文件

html - 清除浏览器历史记录后,使用 pouch db 存储到浏览器数据库中的数据将丢失

javascript - 使用 javascript 将值动态添加到 Web SQL 数据库中的表

javascript - Safari 中 WebSQL 中的 SELECT 查询返回错误

javascript - 电子邮件输入中 HTML5 输入模式中的正则表达式无效

javascript - 触发浏览器事件进行测试

javascript - MouseOut 函数仅工作 1 次

javascript - 在 web sql 中获取基于给定日期的所有行

javascript - IndexedDBShim 工作了一段时间,然后产生错误