Skip to content

Instantly share code, notes, and snippets.

@jelcaf
Created July 17, 2020 12:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jelcaf/c7faf8613972fad62948714b642a529d to your computer and use it in GitHub Desktop.
Save jelcaf/c7faf8613972fad62948714b642a529d to your computer and use it in GitHub Desktop.
Generator sample with async funcions
'use strict';
let times = 1;
let processed = 0;
async function searchUsers(skip) {
return new Promise((resolve) => {
setTimeout(() => {
if (skip > 32) {
return resolve([]);
}
console.log('Call service: ', times++);
return resolve(['a', 'b', 'c', 'd', 'e', 'f']);
}, 2000);
});
}
async function* fetchUsers() {
let skip = 0;
let fetchNextPage = true;
while (fetchNextPage) {
const cursorUsers = await searchUsers(skip);
if (cursorUsers.length === 0) {
fetchNextPage = false;
break;
}
skip += cursorUsers.length;
for await (const user of cursorUsers) {
yield { processed: ++processed, user };
}
}
}
const users = fetchUsers();
(async () => {
for await (const val of users) {
console.log(`User ${val.user}: Users Processed: ${val.processed}`);
}
})();
/********** OUTPUT
Call service: 1
User a: Users Processed: 1
User b: Users Processed: 2
User c: Users Processed: 3
User d: Users Processed: 4
User e: Users Processed: 5
User f: Users Processed: 6
Call service: 2
User a: Users Processed: 7
User b: Users Processed: 8
User c: Users Processed: 9
User d: Users Processed: 10
User e: Users Processed: 11
User f: Users Processed: 12
Call service: 3
User a: Users Processed: 13
...
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment