我正在写一个钛应用程序,但我遇到了与我的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