链接promise时出现WebSQL错误“SQL执行被禁止”
WebSQL error `SQL execution is disallowed` when chaining promises
我知道这个标题很难理解,但老实说,我无法为我的具体案例想出更好的标题(可以接受建议(。因此,基本上我在这个JSFiddle(的简化版本(上记下了我面临的问题。我使用AngularJS的$q.all
方法来收集依赖于查询结果的承诺数组:
db.transaction(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
其中CCD_ 2是返回promise数组的函数
在上面的例子中,一切都按预期进行,结果(解析promise的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
是一个仅返回promise的函数,该promise解析为tx
对象本身(
我是否偶然发现了一个常见的陷阱?我到处找,但什么也没找到。干杯
这是因为在解析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);
});
});
});
});
看看这把小提琴。
相关文章:
- 启用/禁用按钮,单击并执行 SQL 时会发生变化
- 若data=0,则不更新(执行)表.(JavaScript/SQL)
- Web SQL事务在javascript函数中未正确执行
- SQL语句是通过PhoneGap'按顺序执行的吗;的Web SQL数据库
- 执行导入的sql文件
- JavaScript SQLite SQL是不允许执行的
- 如何在更少的 SQL 查询中执行复杂的 API 授权
- 如何在客户端浏览器中执行类似SQL的查询
- 执行带有 WHERE 子句的 Sql 在 Phonegap 中不返回任何结果
- Ajax/Jquery - 在从服务器返回数据时调用 javascript 函数/使用 ajax 执行并行 SQL 查询
- Web SQL 数据库 - 执行 asyc 调用并继续
- 如何在执行php文件以从SQL数据库获取信息时上传数据以用作过滤器
- 无法使用mysql模块在node.js中执行Sql查询
- 如何在带有用户输入字段的HTML页面上执行SQL命令,并在同一页面上显示结果
- 如何将用户输入发送到php,执行SQL命令并显示php的输出
- 如何在Javascript-App中引用SQLite的简单方式,只需使用'DB_open,执行SQL.'
- Firebase排行榜,最佳执行.SQL连接和顺序
- webkit执行sql语句和循环问题
- Node.js执行SQL文件
- 如何执行sql“like”;火力基地行动