Skip to content

Instantly share code, notes, and snippets.

@luissardon
Last active March 10, 2016 20:04
Show Gist options
  • Save luissardon/860c06122bccc6c843c7 to your computer and use it in GitHub Desktop.
Save luissardon/860c06122bccc6c843c7 to your computer and use it in GitHub Desktop.
Run Sequence (Function Generator + Promise)
let firstTask = (resolve, reject) => {
console.log("first task start");
setTimeout(resolve, 1000, 'first task success');
}
let secondTask = (resolve, reject) => {
console.log("second task start");
setTimeout(reject, 1000, 'second task fail');
}
let thirdTask = (resolve, reject) => {
console.log("third task start");
setTimeout(resolve, 1000, 'third task success');
}
runSequence([
firstTask,
secondTask,
thirdTask
]).then(() => {
console.log("done");
}).catch((error) => {
console.log(error);
});
function runSequence(tasks) {
let tasksPromises = function* () {
for(var task of tasks) {
yield new Promise((resolve, reject) => {
task(resolve, reject);
})
}
}();
let recursivePromise = (__resolve, __reject) => {
let taskPromise = tasksPromises.next();
if(taskPromise.done) {
__resolve();
} else {
taskPromise.value.then((value) => {
recursivePromise(__resolve, __reject);
}).catch((value) => {
__reject(value);
});
}
}
return new Promise((__resolve, __reject) => {
recursivePromise(__resolve, __reject);
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment