Skip to content

Instantly share code, notes, and snippets.

@talhaHavadar
Created July 25, 2019 18:25
Show Gist options
  • Save talhaHavadar/2dde42060ed10bb9847bbff9b5df51ef to your computer and use it in GitHub Desktop.
Save talhaHavadar/2dde42060ed10bb9847bbff9b5df51ef to your computer and use it in GitHub Desktop.
Javascript async iterators to fetch data from paginated REST api.
async function pageRequest(params) {
if (params.start >= 100) {
return Promise.resolve({
start: params.start,
limit: 25,
isEndOfData: true
});
} else {
return Promise.resolve({
start: params.start,
limit: 25,
isEndOfData: false
});
}
};
let pageIterator = {
[Symbol.asyncIterator]: () => {
return {
offset: 0,
finished: false,
async next() {
if (!this.finished) {
let response = await pageRequest({ start: this.offset });
this.finished = response.isEndOfData;
this.offset += response.limit;
return Promise.resolve({
value: response,
done: false
});
} else {
this.offset = 0;
this.finished = false;
return Promise.resolve({
done: true
});
}
}
}
}
};
(async() => {
for await (const item of pageIterator) {
console.log(item);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment