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
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ď č. 1Pozorovateľ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