我正在使用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 –