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

2020-08-14  本文已影响0人  sorry510
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))
上一篇 下一篇

猜你喜欢

热点阅读