您可以使用递归:
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 */
});
,
如果您的目标是从所有页面收集液滴信息,则可以将数据累积在数组中,该数组作为参数传递给递归函数的每个后续调用(直到到达最后一页):
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);
});
,
一种简单的方法:
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,nextPage) // recursive call
}
我希望它可以帮助您:D
,
使用递归函数
递归函数是在其执行期间调用自身的函数
执行
所以您的代码将是这样
const recursion = async (command,firstPage) => {
const { nextPage,firstPage)
// do what ever you want
if (nextPage)
await recursion(command,firstPage)
else {
// something else
}
}
本文链接:https://www.f2er.com/3123877.html