Last active
August 31, 2017 18:57
-
-
Save jordaaash/ead1091cb6c0b5a9d871b2a9b741eaf6 to your computer and use it in GitHub Desktop.
Revisions
-
jordaaash revised this gist
Aug 31, 2017 . 1 changed file with 1 addition and 0 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -14,6 +14,7 @@ const fiber = function <T: any> (callback: () => T): Promise<T> { try { value = callback(function next (): void { if (yielded) { yielded = false; fiber.run(); } else { -
jordaaash created this gist
Aug 31, 2017 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,42 @@ /* @flow */ 'use strict'; const Promise = require('bluebird'); const Fiber = require('fibers'); const fiber = function <T: any> (callback: () => T): Promise<T> { return new Promise(function (resolve: Function, reject: Function): void { Fiber(function (): void { let fiber: Fiber = Fiber.current; let yielded: boolean = false; let value: T; try { value = callback(function next (): void { if (yielded) { fiber.run(); } else { yielded = true; Fiber.yield(); } }); if (yielded) { resolve(value); } else { throw new Error('fiber not yielded'); } } catch (error) { reject(error); } finally { fiber = null; } }).run(); }); }; module.exports = fiber;