Last active
November 5, 2015 07:52
-
-
Save Madsy/e7f66b6a26123c1cb59e to your computer and use it in GitHub Desktop.
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
//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