Skip to content

Instantly share code, notes, and snippets.

@Madsy
Last active November 5, 2015 07:52
Show Gist options
  • Save Madsy/e7f66b6a26123c1cb59e to your computer and use it in GitHub Desktop.
Save Madsy/e7f66b6a26123c1cb59e to your computer and use it in GitHub Desktop.
//Can only return Promises
function *sync_async_function() {
var value1 = yield asyncFunction1();
var value2 = yield asyncFunction2(value1);
var value3 = yield asyncFunction3(value2);
var value4 = yield asyncFunction4(value3);
someSynchronousFunction(value4);
};
//Entrypoint for helper
function coresolverStart(promise_generator){
var gen = promise_generator();
var genstate = gen.next();
var promise = genstate.value;
var done = genstate.done;
coresolver(gen, promise, done);
};
//Helper function for resuming coroutine when the yielded promise resolves.
function coresolver(generator, promise, isdone){
if(!isPromise(promise)){
throw Error("Not a promise");
}
promise.then(
function(promise_value){
if(!isdone){
var genstate_next = generator.next(promise_value);
if(genstate_next.value){
var promise_next = genstate_next.value;
coresolver(generator, promise_next, genstate_next.done);
}
}
},
function(error){
throw error;
}
);
};
coresolverStart(sync_async_function);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment