1
道歉,但我似乎要繞圈。Jquery:控制功能流延遲
這個過程是相當staightforward
SaveButtonClicked
通話功能進行離線數據庫事務更新記錄
檢查是否在線(/ *用於埃德諾頓例子這樣做* /)
如果在線調用select transaction來獲取所有updat編輯記錄的選擇負載結果
成功到一個數組
調用web服務與陣列
到目前爲止,我一直試圖控制與 $ .Deferred流,dothis =推遲.pipe(...), .queue [但這些似乎基於一個元素而不是函數完成], 將函數放入一個數組中,
in tes ting控制檯總是在'建築物陣列'之前寫'陣列'
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,隊列,回調......黑暗魔法?
FWIW,沒有必要環繞'deferA.resolve(功能)' - 'deferA.resolve'爲由於函數對它內部的延遲對象有一個封閉的引用,因此裸函數引用將起作用。 – Alnitak
感謝您的指導@ F.Calderan非常感謝您的幫助,對錯過推(工作)位(速度打字)的道歉,areweonline只是在調用selectrows之前進行的一次檢查(如果不在線,則不需要調用selectrows)。再次歡呼 – user1412045