ค้นหาเว็บไซต์

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') ทันทีและหลังจากนั้นฉันถึงจะได้รับข้อความล็อกในคอนโซล

ฉันคิดว่ามันเป็นปัญหาเรื่องการเรียกแบบซิงค์/อะซิงค์แน่นอน แต่ฉันไม่รู้ว่าต้องจัดการอย่างไร

ขอบคุณสำหรับการสนับสนุน