链接承诺时,WebSQL错误“SQL执行被禁止”

时间:2015-05-20 08:14:53

标签: javascript angularjs promise web-sql

我知道标题是满口的,但老实说我不能为我的具体案例提出一个更好的标题(对建议持开放态度)。 所以基本上我记下了this JSFiddle(简化版)我面临的问题。我正在使用AngularJS的$q.all方法来收集依赖于查询结果的promises数组:

db.transaction(function(tx) {
    $q.all(fn(tx)).then(function(a) {
        console.log("Result:", a);
    });
});

其中fn是一个返回promises数组的函数 在上面的例子中,一切都按预期工作,结果(解析承诺的sql查询结果数组)正确console.log ged。
但是,如果我将$q.all包装在另一个延迟对象的then方法中,则如下:

db.transaction(function(tx) {
    fn2(tx).then(function(tx) {
        $q.all(fn(tx)).then(function(a) {
            console.log("Result:", a);
        });
    });
});

我收到错误:Error: Failed to execute 'executeSql' on 'SQLTransaction': SQL execution is disallowed.
fn2是一个只返回一个解析为tx对象本身的promise的函数 我偶然发现了常见的陷阱吗?我搜索了一下,但没有想出任何东西。欢呼声。

1 个答案:

答案 0 :(得分:2)

这是因为当### Error querying database. Cause: java.lang.NullPointerException ### The error may exist in com/MyRequestMapper.java (best guess) ### The error may involve com.MyRequestMapper.getAllRequests ### The error occurred while handling results ### SQL: SELECT* FROM MY_REQUESTS where request_date = ? ### Cause: java.lang.NullPointerException 解决后,交易已经关闭。

如果您不在fn2fn2中使用交易(甚至是同一交易),它应该有效:

fn

请参阅此fiddle