我正在使用Angular2。我想要实现的逻辑首先获取总页码,然后,我想遍历所获得的页码数量以从服务器获取项目。但是,由于异步调用,它不像我期望的那样工作。如何顺序循环通过异步调用?
此外,我必须在调用实际方法之前获取票证。在最后阶段,从服务器获得的整个项目也应该被分类和分组。以下代码是我尝试过的。我认为这是不正确的。
ngOnInit(): void {
let page_count: number = 1;
if(this.id) {
this.searchService.getPageNum(this.id).subscribe((data: Object) => {
page_count=(<Base>data).pageCount;
console.log("page_count\t" + page_count);
this.items = [];
for(let i=1; i<=page_count; i++) {
this.searchService.getItems(this.id, i).subscribe((data: Object) => { this.generateItems(data) ; });
}
console.log("items num\t" + this.items.length);
this.sortItems();
this.groupItems();
});
}
}
getPageNum(id: string) {
return this.userAuthService.getTicket()
.switchMap((data:string) => {
let url = this.config.baseUrl + cui + '/items?ticket=' + data;
return this.http.get(url)
.map((responseData) => {return responseData.json()})
});
}
getItems(id: string, pageNum: number) {
return this.userAuthService.getTicket()
.switchMap((data:string) => {
let url = this.config.baseUrl + cui + '/items?ticket=' + data +'&pageNumber=' + pageNum;
return this.http.get(url)
.map((responseData) => {return responseData.json()})
});
}
当我打印项目的数量时,它确实给了我'0'。我认为我在异步调用方面仍然很差。
哪里在代码arw你推this.items数组中的项目? –
我对AngularJS 2不太熟悉,但只有ES5/6,并且自从Angular的构建奠定了JavaScript的基础之后,我可能会提供帮助。据我所见,你不会向“this.items”推送任何东西。无论是在for循环中还是在其外部。 – Galago
你的for循环还有一件事是同步的,getItems函数是async,你无法在forloop之后无法使用console.log,即使你在this.items –