用最少的代码实现 co 框架
发布于 7 年前 作者 Hyurl 3431 次浏览 来自 分享

在 async 正式得到支持之后,co 框架也慢慢被淘汰了,不过作为学习用途,还是有所意义的。 下面的代码改良自 tslib,用最少的代码实现 co 框架:

/**
 * @param {GeneratorFunction} gen
 */
function co(gen) {
    return new Promise((resolve, reject) => {
        var fulfilled = (value) => {
            try {
                step(gen.next(value));
            } catch (e) {
                reject(e);
            }
        };
        var rejected = (value) => {
            try {
                step(gen.throw(value));
            } catch (e) {
                reject(e);
            }
        };
        var step = (result) => {
            result.done ? resolve(result.value)
                : Promise.resolve(result.value).then(fulfilled, rejected);
        };

        step((gen = gen()).next());
    });
}
回到顶部