實現一個簡單的 generator 自動執行函數

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))
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。