SOURCE

// async 函数的实现原理,就是将 Generator 函数和自动执行器,包装在一个函数里。


async function fn(args) {
    // ...
}

// 等同于

function fn(args) {
    return spawn(function* () {
        // ...
    });
}

// spawn函数就是自动执行器
function spawn(genF) {
    return new Promise(function (resolve, reject) {
        const gen = genF()
        function step(nextF) {
            let next
            try {
                next = nextF()
            } catch (e) {
                reject(e)
            }
            if (next.done) {
                return resolve(next.value)
            }
            Promise.resolve(next.value).then(function (v) {
                step(function () {
                    return gen.next(v)
                })
            },
                function (e) {
                    step(function () {
                        return gen.throw(e)
                    })
                }
            )
        }
        step(function () {
            return gen.next(undefined)
        })
    })
}
console 命令行工具 X clear

                    
>
console