今天看到一个让人非常难以理解的方法
一个将异步函数组合,然后依次执行的方法
然后试着理解并对代码进行逐条分析
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() //方法启动
})
}
}