WebSQL事务在控制台中工作,而不是在代码中工作

时间:2012-03-12 13:30:52

标签: javascript sencha-touch sencha-touch-2 web-sql

我正在尝试编写支持树数据的Sencha Touch 2.0 WebSql代理。我从tomalex0的WebSql / Sqlite代理开始。 https://github.com/tomalex0

修改脚本时遇到了一个奇怪的调试问题:

(我使用的是Chrome 17.0.963.78 m)

以下剪辑刚跳过来。交易永远不会发生!但是当我在上面或下面设置断点并在控制台中运行相同的代码时,它确实有用!

dbConn.transaction(function(tx){
    console.log(tx);
    if (typeof callback == 'function') {
        callback.call(scope || me, results, me);
    }
    tx.executeSql(sql, params, successcallback, errorcallback);
});

您可以看到蓝色日志,绿色日志来自成功处理程序。当执行查询时,上面会有完全相同的日志(它是一个SELECT * FROM ...;因此,当执行多次而不更改数据时,我会期望相同的结果)

我发现当我将代码块添加到watch表达式时,它也会运行。

Debug Example

1 个答案:

答案 0 :(得分:1)

它没有被跳过。它正在被调度,但由于请求的异步性质,直到很久才被执行:

http://ejohn.org/blog/how-javascript-timers-work/

由于代码正在同步执行以进行异步调用,因此,由于javascript的单线程性,它将延迟调用,直到执行同步代码为止。