递归循环一个承诺?

我从 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..

        })

    })

})


森林海
浏览 187回答 3
3回答

繁花不似锦

你可以使用递归: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 */});

哔哔one

一个简单的方法来做到这一点:    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

慕森王

如果您的目标是从所有页面收集液滴信息,您可以将数据累积在一个数组中,该数组作为参数传递给递归函数的每个后续调用(直到到达最后一页):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);});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript