/ / Ъгловата 5+ не може да спаси резултат от наблюдаваната реакция - ъглова, типова, http, наблюдавана, абонамент

Ъгловите 5+ не могат да запазят резултантната форма, която може да бъде наблюдавана - ъглова, текстова, http, наблюдаема, абонаментна

Имам Angular приложение, което консумира данни от webapi. Когато направя заявка, получавам типична видима.

сега, когато правя това:

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

това, което виждам в конзолата мога да видя това

конзола на екрана

Мога ясно да видя, че резултатът има нужда от Продукта. Но защо не мога да запишете това на местните ми променливи данни?

Благодаря

Отговори:

1 за отговор № 1

Наблюдаем е асинхронно, просто като обещание. Така console.log(this.data); се изпълнява преди връщането на отговора. Опитвам .

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

Сега отпечатвате данните си, след като е зададен.


0 за отговор № 2

Работите с вас async програмиране не можете да спрете изпълнението на кода и абонаментът ви ще бъде разрешен в бъдеще, но не можете да предвидите кога. console.log() извън абонамента се изпълнява преди разрешаването на абонамента ви
това, което можете да направите, е да съхраните стойността в свойството клас в рамките на абонаментното обратно извикване това за по-добро разбиране.

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

0 за отговор № 3

Трябва да запишете данните в абонамента за наблюдение на HTTP:

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

0 за отговор № 4

Можете да направите нещо подобно, най-накрая тук ще се изпълни, след като getProductId приключи

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

използвам и накрая когато се опитвам да дебъгвам rxjs наблюдава