Имам 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 наблюдава