递归遍历一个诺言?

我从DigitalOcean API获取了一个液滴列表,但是液滴列表是每页的。

响应为您提供了页面和下一页上的液滴列表...

我试图递归地获得每个承诺的下一页:

getDropletsPerPage(command,firstPage).then((response)=>{

    nextPage= response['nextPage']
    droplets= response['droplets']
​
    getDropletsPerPage(command,nextPage).then((response)=>{

        nextPage= response['nextPage']
        droplets= response['droplets']
​
        getDropletsPerPage(command,nextPage).then((response)=>{

            nextPage= response['nextPage']
            droplets= response['droplets']

            // Repeat until last page..
        })
    })
})
taitan_winter 回答:递归遍历一个诺言?

您可以使用递归:

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

大家都在问