我正在寫一個鈦應用程序,但我遇到了與我的JavaScript的執行順序有關的問題。Javascript:設置功能的順序
我有一個按鈕上的事件監聽器。這是一個重載按鈕,用於清除表格,使用HTTPClient獲取約會的JSON數組,保存每個約會並刷新表格列表。問題是我正在執行表刪除第一應該清除表,然後我得到的約會,但是當應用程序刷新數據表,就像它做得太快,新的約會尚未保存,因爲我得到一個空的列表。現在,如果我註釋掉db.deleteAll行,每次單擊重新加載時,都會使用新(和現有)約會數據刷新列表。
我需要確保一切都按順序完成,只有當前一個任務完成時。因此,必須在db.DeleteAll後執行appointmentments.download(),並且必須在var allAppointments = db.All()後執行列表刷新。
我認爲問題在於約會.download()函數必須進行HTTP GET調用,然後保存結果,其他函數不會等待完成。
下面是代碼:
btnReload.addEventListener('click', function(e){
var affected = db.deleteAll();
appointments.download();
var allAppointments = db.all();
Ti.API.info(allAppointments);
appointmentList.setData(allAppointments);
});
下面是被調用的函數:
db.deleteAll():
api.deleteAll = function(){
conn.execute('DELETE FROM appointments');
return conn.rowsAffected;
}
appointments.download():
var appointments = (function() {
var api = {};
api.download = function(){
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function()
{
var data = JSON.parse(this.responseText);
var dl = (data.length);
for(i=0; i<dl;i++)
{
//p = addRow(data,i); // returns the **arr array
//Ti.API.info('Saving : '+data[i].first_name);
var contact_name = data[i].first_name + ' ' + data[i].last_name;
var start_date = data[i].start_date;
var reference = data[i].reference;
var comment = data[i].comment;
var appointment_id = data[i].quote_id;
var lastid = db.create(appointment_id, start_date, reference, contact_name, comment);
//Ti.API.info(lastid);
}
};
xhr.open('GET','http://********.co.uk/appointments/download/');
xhr.send();
return;
}
任何幫助最感謝! Billy
謝謝outis!這工作非常好,感謝CPS的描述! – iamjonesy