Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
GitHub API pagination with RxJS
const GitHubApi = require("github");
const Rx = require("rx");
const github = new GitHubApi();
const getCommitsAsync = (param) => github.repos.getCommits({
owner: 'amowu',
repo: 'test-semantic-release',
...param
});
const checkNextPage = (response) =>
github.hasNextPage(response)
? Rx.Observable.fromPromise(github.getNextPage(response))
: Rx.Observable.empty();
const concatAllCommits = (acc, curr) => acc.concat(curr.data);
const getAllCommits$ = Rx.Observable
.fromPromise(getCommitsAsync({ per_page: 100 }))
.expand(checkNextPage)
.reduce(concatAllCommits, []);
// getAllCommits$.subscribe(
// (commits) => console.log(commits)
// );
const commits = await getAllCommits$.toPromise();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment