SOURCE

function asyncTo(generator) {
    const gen = generator()
    return new Promise((resolve, reject) => {
        function step(key, arg) {
            let generatorResult
            try {
                generatorResult = gen[key](arg)
            } catch (error) {
                return reject(error)
            }
            const { value, done } = generatorResult
            if (done) {
                return resolve(value)
            } else {
                return Promise.resolve(value).then(val => step('next', val), err => step('throw', err))
            }
        }
        step("next")
    })
}


function* generator() {
    let p1 = yield Promise.resolve('p1')
    console.log('p1: ' + p1)
    let p2 = yield Promise.resolve('p2')
    console.log('p2: ' + p2)
    return 3
}

asyncTo(generator).then(res => console.log(res))
console 命令行工具 X clear

                    
>
console