티타늄 앱을 쓰고 있는데 자바 스크립트의 실행 순서에 문제가 있습니다.자바 스크립트 : 함수의 순서 설정
버튼에 이벤트 리스너가 있습니다. 테이블을 지우고 HTTPClient를 사용하여 '약속'의 JSON 배열을 가져와 각 약속을 저장하고 테이블 목록을 새로 고치는 다시로드 버튼입니다. 문제는 내가 테이블을 지워야하는 테이블 삭제를 먼저 실행하고 있습니다. 그런 다음 약속을 얻습니다.하지만 앱이 데이터 테이블을 새로 고침하면 너무 빨리 처리되고 새 약속이 저장되지 않은 것 같습니다. 빈 목록. 이제 db.deleteAll 행을 주석 처리하면, 새로 고침을 클릭 할 때마다 새 (및 기존) 약속 데이터로 목록이 새로 고쳐집니다.
이전 작업이 완료되었을 때만 모든 것이 순서대로 이루어 졌는지 확인해야합니다. 따라서 db.DeleteAll 후에도 appointments.download()를 실행해야하고 목록 새로 고침을 수행해야합니다. var allAppointments = db.All();
나는 문제는 appointments.download() 함수가 HTTP GET 호출을 만들어 결과를 저장하고 다른 함수가 끝날 때까지 기다리지 않는다는 것입니다.
db.deleteAll() :
api.deleteAll = function(){
conn.execute('DELETE FROM appointments');
return conn.rowsAffected;
}
appointments.download() : 여기
btnReload.addEventListener('click', function(e){
var affected = db.deleteAll();
appointments.download();
var allAppointments = db.all();
Ti.API.info(allAppointments);
appointmentList.setData(allAppointments);
});
호출되는 함수이다 : 여기
코드이다
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;
}
가장 높이 평가! 빌리
감사합니다! 이것은 정말 잘 작동했고 CPS에 대한 설명에 감사드립니다! – iamjonesy