Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • S038-手写async,await的实现

S038-手写async,await的实现


    // const aFunc = () => {
    //   return new Promise((resolve) => {
    //     setTimeout(() => {
    //       resolve('a')
    //     }, 1000)
    //   })
    // }
    // const bFunc = () => {
    //   return new Promise((resolve) => {
    //     setTimeout(() => {
    //       resolve('b')
    //     }, 1000)
    //   })
    // }

function* generator() {
    let result = yield aFunc();
    console.log(result);
    let other = yield bFunc();
    console.log(other);
}
myAwait(generator);

function myAwait(genner, ...args) {
    let iter = genner(...args); //得到生成器的迭代器
    return new Promise((resolve, reject) => {
        let result; //iter每次暂停时的结果
        //! inner就是在手动迭代iter
        let inner = function (yield) {
            result = iter.next(yield); //开始迭代 将这里的yield当作yield传入生成器
            if (result.done) {
                //迭代结束:
                resolve(result.value); //Promise结束
            } else {
                //如果没有结束 等到promise的结束继续递归
                return Promise.resolve(result.value).then((fulfilled) => {
                    inner(fulfilled);
                });
            }
        };
        inner(); //迭代器第一次不应该传入参数
    });
}

手写一个async/await的实现

Edit this page
最近更新: 2025/10/17 02:02
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人