Last active
August 23, 2017 12:32
-
-
Save mdnmdn/b64236ce54b439f8a9ef26f1c914e4be to your computer and use it in GitHub Desktop.
Async with generator on node.js
This file contains 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
const generatorAsync = function(generator){ | |
let gen = generator(); | |
let processNext = function(result){ | |
var val = gen.next(result); | |
if (val.value && val.value.then){ | |
// TODO: manage error with gen.throw(...) | |
val.value.then(res => processNext(res)); | |
} | |
}; | |
processNext(); | |
}; | |
const log = console.log.bind(console); | |
const promiseLog = function(msg, previousMsg = null){ | |
return new Promise((resolve, reject) => { | |
process.nextTick(() => { | |
previousMsg = previousMsg ? ` previous: ${previousMsg}`: '' ; | |
log(`log: ${msg} ${previousMsg}`); | |
resolve(msg); | |
}); | |
}); | |
}; | |
generatorAsync(function*(){ | |
let old = yield promiseLog('gen1'); | |
old = yield promiseLog('gen2',old); | |
old = yield promiseLog('gen3',old); | |
old = yield promiseLog('gen4',old); | |
promiseLog('gen5',old); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment