我不太了解Angular和反应式编程,我正在为这个问题而苦苦挣扎。
我有一个名为ManagerService
的服务,该服务存储了我的应用程序使用的一些静态数据。该服务的构造函数调用WebService,该服务从服务中检索数据。
constructor(private apiService: APIService) {
this.apiService.getData()
.subscribe((result: APIResponse) => {
this.mylist = result.responseObject;
});
}
这可以正常工作,但是大约需要800-> 900毫秒才能完成。由于会有更多数据,因此将来需要更长的时间。 这些数据是静态的,并且还需要花费一些时间,因此对服务器的API调用仅应在启动服务后执行一次。
同时,我有一个组件,该组件在加载时会启动服务。
然后,在ngOnInit()
中,它在服务上调用另一个方法,以返回一些静态数据。
this.item = this.manager.getRandomItem();
然后将多次调用它。
这是ManagerService
中的方法
public getRandomItem() {
const index = Math.floor((Math.random() * this.myList.length) + 1);
return this.myList[index];
}
问题在于,第一次调用getRandomItem()
方法时,尚未填充变量myList
;
程序的当前流程为:
我想不出一种方法来使该方法等待数据填充到myList
中。
答案 0 :(得分:0)
ngOnInit(): void {
this.apiService.getData().pipe(map(list => getRandomItem(list))).subscribe(result
=> ...)
}
public getRandomItem(myList: []) {
const index = Math.floor((Math.random() * myList.length) + 1);
return myList[index];
}