美文网首页
实现一个简单的 generator 自动执行函数

实现一个简单的 generator 自动执行函数

作者: sorry510 | 来源:发表于2020-08-14 23:46 被阅读0次
function co(fn) {
    return new Promise(resolve => {
        const gen = fn()

        next()

        function onFulled(value) {
            next(value)
        }

        function next(val) {
            const { done, value } = gen.next(val)
            if (done) {
                resolve(Promise.resolve(value))
            } else {
                value.then(onFulled)
            }
        }
    })
}

测试

function sleep(time) {
    return new Promise((resolve, reject) => setTimeout(_ => resolve(time), time))
}

co(function* () {
    console.log('start')
    const b = yield sleep(1000)
    console.log(b)
    const a = yield sleep(2000)
    console.log(a)
    return 'end'
}).then(res => console.log(res))

相关文章

网友评论

      本文标题:实现一个简单的 generator 自动执行函数

      本文链接:https://www.haomeiwen.com/subject/nurodktx.html