/ / Angular 5+ nedokáže uložiť výslednú formu pozorovateľnej reakcie - uhlová, strojopis, http, pozorovateľná, predplatné

Úhlový 5+ nemôže uložiť výslednú podobu pozorovateľnú odpoveď - uhlové, typografické, http, pozorovateľné, predplatné

Mám aplikáciu Angular, ktorá spotrebúva údaje z webapi. Keď podám žiadosť, dostanem napísaný pozorovateľ.

teraz, keď to urobím:

data: Product[];
productService.getByProductId("061000957").subscribe(res => {
console.log(res);
this.data = res;
});
console.log(this.data);

čo vidím na konzole, vidím to

konzoly screenshot

Jasne vidím, že výsledok má produkt, ktorý potrebujem. Prečo to však nemôžem uložiť do svojich miestnych premenných údajov?

Vďaka

odpovede:

1 pre odpoveď č. 1

Pozorovateľné je asynchrónne rovnako ako sľub. tak console.log(this.data); sa vykoná pred vrátením odpovede. Vyskúšajte.

data: Product[];
productService.getByProductId("061000957").subscribe(res => {
console.log(res);
this.data = res;
console.log(this.data);
});

Teraz údaje vytlačíte po ich nastavení.


0 pre odpoveď č. 2

S ktorými pracujete asynchrónne programovanie nemôžete pozastaviť vykonávanie kódu a váš odber bude vyriešený v budúcnosti, ale nemôžete predpovedať, kedy. console.log() mimo odber sa vykoná pred vyriešením vášho prihlásenia na odber
čo môžete urobiť, je, že môžete uložiť hodnotu do vlastnosti triedy vo vnútri predplatného spätného volania .Refer toto pre lepšie pochopenie.

   data: Product[];
productService.getByProductId("061000957").subscribe(res => {
console.log(res);
this.data = res;
console.log(this.data);
});

0 pre odpoveď č. 3

Údaje by ste mali uložiť v predplatnom HTTP Observable:

productService.getByProductId("061000957").subscribe(res => {
this.data = res;
console.log(this.data)   //you can see
})

0 pre odpoveď č. 4

Môžete to urobiť niečo také, nakoniec sa spustí po dokončení getProductId

productService.getByProductId("061000957")
.finally(() => console.log(this.data))
.subscribe(res => {
console.log(res);
this.data = res;
});

používam a nakoniec keď sa snažím ladiť rxjs pozorovateľným