链接承诺时,WebSQL 错误“SQL 不允许执行”
WebSQL error `SQL execution is disallowed` when chaining promises
我知道标题很啰嗦,但老实说,我想不出一个更好的标题来针对我的具体情况(欢迎提出建议)。
所以基本上我记下了我面临的问题 this JSFiddle(简化版)。我正在使用 AngularJS 的 $q.all
方法根据查询结果收集一组承诺:
db.transaction(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
其中 fn
是一个 returns 承诺数组的函数。
在上述情况下,一切都按预期工作,结果(解决承诺的 sql 查询结果数组)被正确 console.log
ged。
但是,如果我将 $q.all
包装在另一个延迟 object 的 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
是一个仅 returns 解析为 tx
object 本身的承诺的函数。
我是否偶然发现了一个常见的陷阱?我搜索了但没有想出任何东西。干杯。
那是因为在 fn2
解决时交易已经关闭。
如果您不在 fn2
和 fn
中使用交易(甚至是同一个交易),它应该可以工作:
db.transaction(function(tx) {
fn2(tx).then(function(tx) {
// new tranaction as the old one is closed
db.transaction(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
});
});
看到这个fiddle。
我知道标题很啰嗦,但老实说,我想不出一个更好的标题来针对我的具体情况(欢迎提出建议)。
所以基本上我记下了我面临的问题 this JSFiddle(简化版)。我正在使用 AngularJS 的 $q.all
方法根据查询结果收集一组承诺:
db.transaction(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
其中 fn
是一个 returns 承诺数组的函数。
在上述情况下,一切都按预期工作,结果(解决承诺的 sql 查询结果数组)被正确 console.log
ged。
但是,如果我将 $q.all
包装在另一个延迟 object 的 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
是一个仅 returns 解析为 tx
object 本身的承诺的函数。
我是否偶然发现了一个常见的陷阱?我搜索了但没有想出任何东西。干杯。
那是因为在 fn2
解决时交易已经关闭。
如果您不在 fn2
和 fn
中使用交易(甚至是同一个交易),它应该可以工作:
db.transaction(function(tx) {
fn2(tx).then(function(tx) {
// new tranaction as the old one is closed
db.transaction(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
});
});
看到这个fiddle。