gpt4 book ai didi

Angular - 正确使用 RXJS 扩展运算符进行递归 http 调用

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:40 24 4
gpt4 key购买 nike

我正在尝试使用上一次调用的值对 Reddit 的 API 进行递归 http 调用。问题是上一个调用在下一个调用开始之前没有完成,所以重复调用。每次调用都应更新“after”值,直到“after”值未定义为止。我找到了这个 related post并尝试使用所描述的解决方案,但我无法弄清楚如何确保在进行下一次调用之前完成上一次调用。下面是我的实际代码:

private getSavedPostsForAuthenticatedUser(username: string, after: string, userPosts: any) {
const headers = new Headers();
if (!userPosts) {
userPosts = [];
}
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())
.expand(response => {
if (response.data) {
for (const post of response.data.children) {
userPosts.push(post);
}
if (response.data.after) {
return this.getSavedPostsForAuthenticatedUser(username, response.data.after, userPosts);
}
}
return Observable.of(userPosts);
});

最佳答案

返回相同的函数 getSavedPostsForAuthenticatedUser 将导致递归扩展。要解决这个问题,您需要分离 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());
}

要停止扩展,您可以使用 Observable.empty()。请引用这个post .

关于Angular - 正确使用 RXJS 扩展运算符进行递归 http 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com