这是我的代码片段:
_service.factory('$opSQL', [ '$rootScope', '$cordovaSQLite',
function($rootScope, $cordovaSQLite){
var db = $cordovaSQLite.openDB( "my.db" );
var dbURL = dbConfig.remoteUrl;
var opSQL = {
deleteRow : function(row) {
var strQuery = "DELETE FROM UpdateTo WHERE id = ? ;";
$cordovaSQLite.execute(db, strQuery, [row.id] )
.then(
function(res) { console.log ( JSON.stringify(row.id)); },
function (err) { console.log ( JSON.stringify(err)); });
},
sendToServer : function(tmp) {
// where tmp = [ { "id":1, "other"="..." }, { "id":2, "other"="..." } ... ]
for(x in tmp)
{
opSQL.deleteRow(tmp[x]);
}
}
}
return opSQL;
}
]);
我认为问题在于sqlite执行的异步,因为查询成功完成但在控制台中我只读取了列表的第一个id。
如何解决这个问题?
答案 0 :(得分:0)
我的建议,函数deleteRow应该返回一个promise。函数sendToServer也应该返回一个你可以等待的promise。它还应该收集来自数组中调用deleteRow的promise并等待所有它们完成。如下所示:
sendToServer : function(tmp) {
var promise = new Promise();
var promiseArray = [];
for(x in tmp)
{
promiseArray.push(opSQL.deleteRow(tmp[x]));
}
Promise.all(promiseArray).then(function() {
// all successful
promise.resolve();
}).catch(function() {
// something went wrong
promise.reject();
});
return promise; // <-- the caller should wait on this promise
}
根据您正在使用的promise库中提供的函数名称进行调整。
希望这很有用。