And*_*loi 3 javascript promise web-sql angularjs
我知道标题很长,但老实说,我无法为我的具体案例想出更好的标题(欢迎提出建议)。所以基本上我记下了这个 JSFiddle(一个简化版本)我面临的问题。我正在使用 AngularJS 的$q.all方法来收集依赖于查询结果的承诺数组:
db.transaction(function(tx) {
$q.all(fn(tx)).then(function(a) {
console.log("Result:", a);
});
});
Run Code Online (Sandbox Code Playgroud)
wherefn是一个返回承诺数组的函数。
在上述情况下,一切都按预期工作,并且结果(解决承诺的 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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
我得到的错误:Error: Failed to execute 'executeSql' on 'SQLTransaction': SQL execution is disallowed.
(fn2的是,仅仅是返回一个承诺,其解析为一个函数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);
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
看到这个小提琴。
| 归档时间: |
|
| 查看次数: |
2722 次 |
| 最近记录: |