Returning the same function getSavedPostsForAuthenticatedUser
will cause recursive expands. To solve this you need to separate the http observable.
private getSavedPostsForAuthenticatedUser(username: string, after: string, userPosts: any) {
const request$ = this._getRequest(username, after, userPosts);
if (!userPosts) {
userPosts = [];
}
return request$
.expand(response => {
if (response.data) {
for (const post of response.data.children) {
userPosts.push(post);
}
if (response.data.after) {
return this._getRequest(username, response.data.after, userPosts);
}
}
return Observable.of(userPosts);
});
}
private _getRequest(username: string, after: string) {
const headers = new Headers();
headers.append('Authorization', `Bearer ${this._token}`);
const redditUrl = `${RetainerConfig.redditOauthUrl}user/${username}/saved`;
const url = after ? `${redditUrl}/?after=${after}` : redditUrl;
return this._http.get(url, {headers: headers})
.map(response => response.json());
}
To stop the expanding you may use Observable.empty()
. Please refer to this post.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…