gpt4 book ai didi

javascript - 链接 promise 时出现 WebSQL 错误 `SQL execution is disallowed`

转载 作者:行者123 更新时间:2023-11-30 10:03:50 25 4
gpt4 key购买 nike

我知道标题很啰嗦,但老实说,我想不出一个更好的标题来针对我的具体情况(欢迎提出建议)。所以基本上我记下了 this JSFiddle (简化版)我面临的问题。我正在使用 AngularJS 的 $q.all 方法根据查询结果收集一组 promise :

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

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

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

我收到错误:错误:无法在“SQLTransaction”上执行“executeSql”:不允许执行 SQL。
(fn2 是一个函数,它仅返回解析为 tx 对象本身的 promise )。
我是否偶然发现了一个常见的陷阱?我搜索了但没有想出任何东西。干杯。

最佳答案

那是因为当 fn2 被解析时事务已经关闭。

如果您不在 fn2fn 中使用事务(甚至是同一个事务),它应该可以工作:

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 .

关于javascript - 链接 promise 时出现 WebSQL 错误 `SQL execution is disallowed`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com