【发布时间】:2022-01-04 21:09:35
【问题描述】:
我有一个分页 API,需要自动获取每页结果。
我已经构建了以下递归承诺链,它实际上给了我想要的输出。我已将传统的决心重命名为外部,以尝试将我的头更多地包裹起来,但我仍然对如何将外部函数传递到嵌套的 .then 感到困惑。那么是允许它工作的魔法酱吗?
我以为我很了解 Promises,但显然不是!
protected execute<T>(httpOptions): Promise<AxiosResponse | T> {
const reqObject: HttpConfig = {
...httpOptions,
baseURL: this.config.baseUri,
headers: { Authorization: `Bearer ${this.config.apiKey}` },
};
return new Promise((outer, reject) => {
axios
.request<T>(reqObject)
.then((res) => {
if (res.headers.link) {
const pagingObject: PagingObject = this.getPagingObject(res);
this.pagedListResponses = this.pagedListResponses.concat(res.data);
if (pagingObject.last) {
this.execute<T>({
url: pagingObject.next,
}).then(outer);
} else {
outer(this.pagedListResponses as any);
}
} else {
outer("No paging header found");
}
})
.catch((err) => reject(err));
});
}
【问题讨论】:
-
你需要所有页面一次,还是滚动时等等?
-
您的方法似乎永远不会初始化
this.pagedListResponses,如果您多次调用execute,这将成为错误的来源。请改用局部变量。 -
在该代码所在类的构造函数中初始化。
-
对我的回答有任何疑问吗?
标签: javascript typescript recursion es6-promise