SOURCE

// 1. Promise如何处理串行请求
let arr = []

var generatePromise = function(){
    return function(){
        return new Promise((resolve,reject) => {
            setTimeout(() => {
                console.log('执行')
                resolve()
            },1000)
        })
    }
}

for(let i=0;i<5;i++){
    arr.push(generatePromise())
}
// 第一种方案
// arr.reduce((cur,prev) => {
//     return cur.then(() => prev())
// },Promise.resolve())

// 第二种方案
// ;(async() => {
//     for(let fn of arr){
//         await fn()
//     }
// })()

// 第三种方案,也是第一种方案的变种
// let r = Promise.resolve()
// for(let fn of arr){
//     r = r.then(() => fn())
// }

// 第四种方案,递归
function dispatch(i,p = Promise.resolve()){
    if(i >= arr.length) return
    return p.then(() => {
        return dispatch(i+1, arr[i]())
    })
}
dispatch(0)

// 第五种方案, generator

console 命令行工具 X clear

                    
>
console