3 回答

TA贡献1851条经验 获得超4个赞
你可以使用递归:
const dispatcher = {
page: firstPage,
droplets: [],
execute: function () {
const self = this;
return new Promise(function (resolve, reject) {
getDropletsPerPage(command, this.page).then(function (response) {
self.page = response['nextPage'];
self.droplets = self.droplets.concat(response['droplets']);
if (nextPage === LAST_PAGE) {
resolve(true);/* done */
} else {
self.execute().then(function () {
resolve(true);
});
}
});
});
}
}
dispatcher.execute().then(function() {
/* reached last page */
});

TA贡献1854条经验 获得超8个赞
一个简单的方法来做到这一点:
async getDropletsList(command, dropletsList, currentPage) {
if(!currentPage) return dropletsList // here you've to check if there is another valid page
const { nextPage, droplets } = await getDropletsPerPage(command, currentPage)
dropletsList = dropletsList.concat(droplets)
return getDropletsList(command, dropletsList, nextPage) // recursive call
}
希望对你有帮助:D

TA贡献1777条经验 获得超3个赞
如果您的目标是从所有页面收集液滴信息,您可以将数据累积在一个数组中,该数组作为参数传递给递归函数的每个后续调用(直到到达最后一页):
const getDroplets = (page, droplets = []) => {
if (/* end of the pagination is reached */) {
return Promise.resolve(droplets);
}
return getDropletsPerPage(command, page).then((response) => {
return getDroplets(
response.nextPage,
droplets.concat(...response.droplets)
);
})
};
getDroplets(firstPage).then(droplets => {
console.log(droplets);
});
添加回答
举报