Files
probot/docs/pagination.md
Brandon Keepers 2efa0b24b7 chore: Rename robot to app (#542)
This replaces all internal references to "robot" with "app" or
"Application". There should be no functional change in public APIs, but
may cause some issues for anyone using internal APIs.
2018-06-01 17:45:23 -05:00

1.4 KiB

next
next
docs/extensions.md

Pagination

Many GitHub API endpoints are paginated. The github.paginate method can be used to get each page of the results.

module.exports = app => {
  app.on('issues.opened', context => {
    context.github.paginate(
      context.github.issues.getAll(context.repo()),
      res => {
        res.data.issues.forEach(issue => {
          context.log('Issue: %s', issue.title)
        })
      }
    )
  })
}

Accumulating pages

The return value of the github.paginate callback will be used to accumulate results.

module.exports = app => {
  app.on('issues.opened', async context => {
    const allIssues = await context.github.paginate(
      context.github.issues.getAll(context.repo()),
      res => res.data
    )
    console.log(allIssues)
  })
}

Early exit

Sometimes it is desirable to stop fetching pages after a certain condition has been satisfied. A second argument, done, is provided to the callback and can be used to stop pagination. After done is invoked, no additional pages will be fetched.

module.exports = app => {
  app.on('issues.opened', context => {
    context.github.paginate(
      context.github.issues.getAll(context.repo()),
      (res, done) => {
        for (let issue of res.data) {
          if (issue.body.includes('something')) {
            console.log('found it:', issue)
            done()
            break
          }
        }
      }
    )
  })
}