将异步函数组合然后依次执行

今天看到一个让人非常难以理解的方法
一个将异步函数组合,然后依次执行的方法
然后试着理解并对代码进行逐条分析

export function series(...task: Array<(_arg: any) => any>) {        //task是一个函数数组,函数有一个参数
    return function (): Promise<any> {
        return new Promise((resolve, reject) => {
            const iteratorTask = task.values()  //创建一个迭代器
            const next = (res?: any) => {       //定义一个next方法
                const nextTask = iteratorTask.next()    //获取迭代器的下一个任务   
                if (nextTask.done) {        //迭代器是否迭代完成
                    resolve(res)    //迭代完成将最终结果 res 传递出去
                } else {    //没有迭代完
                    //依次执行迭代器的第一个函数、第二个函数...    
                    //执行完成后,then方法会自动把上一个函数的执行结果传递给next方法,此时迭代器会迭代到下一个函数,把参数传递给下一个函数并执行
                    Promise.resolve(nextTask.value(res)).then(next).catch(reject)   
                }
            }
            next()      //方法启动
        })
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容