Created
July 17, 2020 12:24
-
-
Save jelcaf/c7faf8613972fad62948714b642a529d to your computer and use it in GitHub Desktop.
Generator sample with async funcions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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