Skip to content

Instantly share code, notes, and snippets.

@okhobb
Last active September 3, 2017 19:46
Show Gist options
  • Save okhobb/a58bf9f38bdb81c62137e0ada316aad9 to your computer and use it in GitHub Desktop.
Save okhobb/a58bf9f38bdb81c62137e0ada316aad9 to your computer and use it in GitHub Desktop.
Example of creating a 'sync' loop from async work
let Promise = require('es6-promise').Promise;
function iterateStreamAsync(nextOpFn) {
function loop(prior) {
if (! prior) {
return;
}
return prior.then(() => loop(nextOpFn()));
}
return loop(nextOpFn());
}
let workItems = [
{ letter: 'A', time: 1000 },
{ letter: 'D', time: 300 },
{ letter: 'C', time: 100 },
{ letter: 'B', time: 2000 },
];
let nextOpFn = () => {
if (workItems.length !== 0) {
let workItem = workItems.shift();
return new Promise((resolve, reject) => {
// Fill this in with your own async work.
setTimeout(() => {
console.log(workItem.letter);
// Call resolve when the work is done.
resolve();
}, workItem.time);
})
} else {
return undefined;
}
}
iterateStreamAsync(nextOpFn);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment