Files
probot/docs/pagination.md
Bo Zhang a73beeb630 Docs: Missing break statement in "Early exit" example (#538)
In current example, the `for` loop won't exit unless the missing `break` statement is added.
2018-05-20 07:23:33 -05:00

1.5 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 = robot => {
  robot.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 = robot => {
  robot.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 = robot => {
  robot.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
          }
        }
      }
    )
  })
}