javascript - รับการตอบสนองเว็บเอพีไอที่แตกต่างกันและประมวลผลข้อมูลในวิธีแบบซิงค์
ฉันกำลังสร้างวิธีการในบริการที่ใช้สำหรับเริ่มต้นข้อมูลของ IndexedDB วิธีการนี้ควรเรียกเว็บ API ในวิธี Ordini_Sincronizza ดึงผลลัพธ์และประมวลผลฐานข้อมูล IndexedDB
รหัสคือดังนี้:
SyncCustomer(codCli: string): Observable<boolean>
{
this.mdService.Ordini_Sincronizza(codCli).subscribe(
data => {
this._DBService.Configurazione.clear().then(
act => {
let itm = new ConfigurazioneFlat();
itm.codIva = data.configurazione.codIva;
itm.notOrd = data.configurazione.notOrd;
itm.ordini_nota = data.ordiniArticoli.nota;
this._DBService.Configurazione.add(itm);
console.log('INITIALIZED: Configurazione_Flat');
}
);
this._DBService.Configurazione_Sconti.clear().then(
act => {
for (let itm of data.configurazione.sconti) {
this._DBService.Configurazione_Sconti.add(itm);
}
console.log('INITIALIZED: Configurazione_Sconti');
}
);
this._DBService.Configurazione_TipiOmaggio.clear().then(
act => {
for (let itm of data.configurazione.tipiOmaggio) {
this._DBService.Configurazione_TipiOmaggio.add(itm);
}
console.log('INITIALIZED: Configurazione_TipiOmaggio');
}
);
this._DBService.Listino_Testata.clear().then(
act => {
for (let l of data.listini) {
this._DBService.Listino_Testata.add(l.testata);
}
console.log('INITIALIZED: Listino_Testata');
}
);
return Observable.of(true);
},
error => {
console.log(error);
return Observable.of(false);
});
return Observable.of(null);
}
เมธอดถูกวางไว้ภายใน SyncService (typescript service) และจะคืนค่า true หากทุกอย่างทำงานได้ดี หรือ false ในกรณีที่เกิดข้อผิดพลาด
ตอนนี้ฉันต้องการใช้วิธีการบริการนี้ในคอมโพเนนต์ ฉันกำลังทำแบบนี้:
DownloadData()
{
this.syncService.SyncCustomer(this.p_codCli).subscribe(
data => {
alert('ok');
},
error => {
alert('err');
console.log(error);
});
}
แต่พฤติกรรมแปลก ๆ ที่ฉันเจอคือฉันได้รับ alert('ok') ทันทีและหลังจากนั้นฉันถึงจะได้รับข้อความล็อกในคอนโซล
ฉันคิดว่ามันเป็นปัญหาเรื่องการเรียกแบบซิงค์/อะซิงค์แน่นอน แต่ฉันไม่รู้ว่าต้องจัดการอย่างไร
ขอบคุณสำหรับการสนับสนุน