申し訳ありませんが、私は輪になって回っているようです。
プロセスはかなり簡単です
SaveButtonClicked
関数を呼び出してオフラインデータベーストランザクションを実行し、レコードを更新します
オンラインかどうかを確認します(/*これを行うためにEdNortonの例を使用しました*/)
オンライン呼び出しの場合、トランザクションを選択して、更新されたすべてのレコードをフェッチします
選択したロードの結果が配列に成功する
配列を使用して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、キュー、コールバック...ダークマジック?