[英]Angular - Using a service property set by callback in another component
我正在嘗試使用等待回調的DataService
屬性myData
。 但是當我調用DataComponent
時它是未定義的。 我如何在那里訪問和使用它?
export class DataService {
public myData;
constructor(private http: HttpClient) {
this.load().then((data) => {
this.myData = data
})
}
load() {
return new Promise((resolve) => {
this.http.get('https://reqres.in/api/users').subscribe(
(res: any) => {
console.log(res.data)
resolve(res.data)
},
(error) => {
console.log(error);
}
)
})
}
}
export class DataComponent implements OnInit {
constructor(private dataService: DataService) {
this.prepareData();
}
prepareData() {
console.log(this.dataService.myData)
}
ngOnInit(): void {
}
}
由於這是一個異步 function,因此您遇到了競態條件。
此更改有效: https://stackblitz.com/edit/angular-ivy-vf3llg
考慮閱讀https://angular.io/guide/http
就我個人而言,我只是讓服務返回原始數據並在其他地方對其進行操作,但如果需要,您可以利用我在更新示例中展示的響應。
這個問題和答案可能真的是這個問題的重復......
您的load()
方法是異步的,這意味着它可以在 2 小時后返回響應,因此它將在 2 小時后執行您的回調,並且您正在同步詢問myData
,這意味着您現在正在詢問它,所以它不會不工作。
您必須等到返回答案,在您的代碼中沒有機會完成此操作,因此要么刪除 yourData 字段並將其訂閱到組件中,要么創建BehaviorSubject
並向組件發出值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.