抱歉,但我似乎在兜圈子。
这个过程相当简单
SaveButtonClicked
调用函数执行离线数据库事务以更新记录
检查是否在线(/*使用 Ed Norton 示例进行此操作 */)
如果在线调用选择事务以获取所有更新的记录
选择加载结果成功到数组中
使用数组调用 web 服务
到目前为止,我尝试使用 $.Deferred, dothis = defer.pipe(...), .queue [但这些似乎基于元素而不是函数完成] 来控制流程,将函数放入数组中,
在测试中,控制台总是在“构建数组”之前写入“构建数组”
var arrvals = [];
var deferA , deferB;
function updatedb(params){
db.transaction('update....',[params],updateOk,updateFail)
}
function updateOk(){
deferA.resolve()
}
function updateFail(){
deferA.reject()
}
function areweonline(){
$.ajax(.....)
}
function selectrows(){
db.transaction('update....',[params],buildarray,selectFail)
}
function buildarray(transaction,results){
console.log('building array')
for(i=0;i<=results.rows.length;i++){
var row = results.rows.item(i);
var job = {};
job.text = row["testtext"]
arrvals.push(job);
}
deferB.resolve()
}
function selectFail(){
deferB.reject();
}
function callwebservice(vals){
$.ajax(....) /* this bit is working fine*/
}
function SaveButtonClicked(){
deferA = $.Deferred();
deferB = $.Deferred();
$.when(deferA).then(
console.log('update completed')
$.when(deferB).then(function(){
console.log('array built')
callwebservice(arrvals)
})
)
}
那么最好的方法是什么?$.Deffered、队列、回调……黑魔法?