1. function spawn(genF) {
    2. return new Promise(function(resolve, reject) {
    3. const gen = genF();
    4. function step(nextF) {
    5. let next;
    6. try {
    7. next = nextF();
    8. } catch (e) {
    9. return reject(e);
    10. }
    11. if (next.done) {
    12. return resolve(next.value);
    13. }
    14. Promise.resolve(next.value).then(
    15. function(v) {
    16. step(function() {
    17. return gen.next(v);
    18. });
    19. },
    20. function(e) {
    21. step(function() {
    22. return gen.throw(e);
    23. });
    24. }
    25. );
    26. }
    27. step(function() {
    28. return gen.next(undefined);
    29. });
    30. });
    31. }