5.使用Promise实现串行

实现promise的核心思想是借助reduce

 第一步

const res = []
//定义一个接受不同promise执行结果的数组

第二步 返回一个promise对象

return new Promise((resolve,reject) => {     
})

第三步 通过reduce讲不同的promise进行串联执行

arr.reduce((pre,cur) => {
    return pre.then(cur).then(data => res.push(data))
},Promise.resolve()).then(() => resolve(res))

Promise.resolve(value) 方法返回一个以给定值解析后的 Promise 对象

完整代码

const funcArr = [
    () =>
        new Promise((resolve) => {
            setTimeout(() => resolve(1), 2000);
        }),
    () =>
        new Promise((resolve) => {
            setTimeout(() => resolve(2), 1000);
        }),
    () =>
        new Promise((resolve) => {
            setTimeout(() => resolve(3), 3000);
        }),
];
/**
 * @description: 实现Promise的串行
 * @param {*}: 接收一个包含多个返回Promise对象的函数的数组
 * @return {*}: 返回一个Promise对象
 */
function inOrder(arr) {
    const res = []
    return new Promise((resolve,reject) => {
        arr.reduce((pre,cur) => {
            return pre.then(cur).then(data => res.push(data))
        },Promise.resolve()).then(() => resolve(res))       
    })
}

inOrder(funcArr).then(data => console.log(data))

参考:如何控制Promise的串行执行? - 掘金 (juejin.cn)

posted @ 2023-03-04 20:14  不想做混子的奋斗远  阅读(198)  评论(0)    收藏  举报