fcoin/lib/utils/spawn.js
2016-09-21 22:58:27 -07:00

52 lines
863 B
JavaScript

'use strict';
function exec(gen) {
return new Promise(function(resolve, reject) {
function step(value, rejection) {
var next;
try {
if (rejection)
next = gen.throw(value);
else
next = gen.next(value);
} catch (e) {
reject(e);
return;
}
if (next.done) {
resolve(next.value);
return;
}
if (!(next.value instanceof Promise)) {
step(next.value);
return;
}
next.value.then(step, function(e) {
step(e, true);
});
}
step(undefined);
});
}
function spawn(generator, self) {
var gen = generator.call(self);
return exec(gen);
}
function co(generator) {
return function() {
var gen = generator.apply(this, arguments);
return exec(gen);
};
}
spawn.co = co;
module.exports = spawn;