Skip to content

Instantly share code, notes, and snippets.

@tario
Last active November 29, 2016 19:56
Show Gist options
  • Save tario/c11c5c9f3cc7e06d04bc95ab3bae1d63 to your computer and use it in GitHub Desktop.
Save tario/c11c5c9f3cc7e06d04bc95ab3bae1d63 to your computer and use it in GitHub Desktop.
function delay(ms) {
var d = Promise.defer();
setTimeout(function() {
d.resolve();
}, ms);
return d.promise;
}
/* ACLARACION: NO usar en produccion, codigo de prueba de concepto, no tiene tests,
nisiquiera se testeo a fondo manualmente */
/* Este codigo es una modificacion de Q.async definida aca: https://github.com/kriskowal/q/blob/v1/q.js#L1280,
para que no dependa de Q */
function async(makeGenerator) {
return function () {
function continuer(verb, arg) {
var result;
try {
result = generator[verb](arg);
} catch (exception) {
return Promise.reject(exception);
}
if (result.done) {
return Promise.resolve(result.value);
} else {
if (result.value && result.value.then) {
return result.value.then(callback, errback);
} else {
return Promise.resolve(result.value).then(callback, errback);
}
}
}
var generator = makeGenerator.apply(this, arguments);
var callback = continuer.bind(continuer, "next");
var errback = continuer.bind(continuer, "throw");
return callback();
};
}
// crea una promise, que se resuelve despues de 1 segundo
var prm = async(function*(name) {
console.log("promise " + name + " started");
yield delay(1000);
console.log("promise " + name + " resolved");
return name.length;
});
var z = async(function*() {
var x = yield prm("xxxx");
var y = yield prm("yyy");
var result = x + y;
console.log("result: " + result);
process.exit();
});
z();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment