我現在需要從一個json資料中獲得資料,最終需要獲得 results中的name屬性,并形成一個陣列,
當前的 url = ‘http://swapi.dev/api/planets/?page=1’
我想通過 這里面的 next屬性來獲知是否 是否當前頁還有資訊, 因為當 next: null 的時候,代表資料就是最后一頁
{
"next": "http://swapi.dev/api/planets/?page=2",
"previous": null,
"results": [
{
name: planet1
}
{
name: planet2
}
...
]
}
type Planet = {
name: string;
}
type Data = {
next: string;
results: Planet[];
}
url = 'http://swapi.dev/api/planets/?page=1';
getData(url: string = this.url): Observable<Data> {
return this.http.get(url).pipe(map((res: {next: string, results: Planet[]}) => {
return {
next: res.next,
results: res.results,
}
}))
}
使用的時候
url = 'http://swapi.dev/api/planets/?page=1';
planets=[];
stop = false;
getPlanets(){
while(!this.stop){
this.getData(this.url).subscribe( res => {
this.url = res.next;
this.planets.push(...res.results);
console.log('this.planets', this.planets);
if(this.url === null) {this.stop = true};
})
}
}
我想的是這里的 console.log 能夠把所有頁面的result都 push 進去, 但是實際上我在 運行的時候 顯示幕上什么都顯示不出來,直接崩了。
請問有什么方法可以實作, 我的這個問題在哪里?
多謝啦!
uj5u.com熱心網友回復:
ts?大概的看了下,代碼里有些東西沒用過,所以先不管你其他的代碼了只是看你回傳的資料結構中,url應該是個字串?還是說沒有的時候回傳的會是:url:null?如果不是,你就不能用this.url === null,它永遠不會達成,stop永遠為false。while一直在,應該就溢位了,就崩掉了
如果你其他所有都沒問題的話,你試試:if(this.url =='null'){this.stop = true};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/229707.html
標籤:JavaScript
