在一个ionic1项目中,需求要做到离线数据库功能,故使用了cordova中的sqlite插件,数据库中的数据会由首次加载app时请求后台数据获取;
但这时发现貌似无法在异步操作中调用sqlite操作,比如最简单的定时器:
$timeout(function(){
//执行sqlite操作
},1000);
此时定时器内部的函数并不会执行,并且报错:
"InvalidStateError: DOM Exception 11: This transaction is already finalized. Transactions are committed after its success or failure handlers are called. If you are using a Promise to handle callbacks, be aware that implementations following the A+ standard adhere to run-to-completion semantics and so Promise resolution occurs on a subsequent tick and therefore after the transaction commits."
而之后尝试使用了jq的ajax并将其修改为了同步执行:
$.ajax({
data: data,
url: url,
type: 'post',
timeout: 3000,
async: false,
success: function(data){
//执行sqllite操作
},
error: function() {
//error
}
})
此时就不再会报之前的一长串错误并且成功回调能够正常执行;
但是实际项目中不可能使用这种极有可能阻塞整个app的方法(比如用户信号不佳),请问是否有解决方法能够让sqlite在异步操作中执行?
红颜莎娜
相关分类