微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

promise顺序执行的多种方案此类问题的母题

异步管理一直是前端开发的一个重点。

就多个promise的顺序执行,总结了下面几种方案。

使用回调的方案,也是最传统的方案

const f1 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p1 runing')
               resolve(1)
           }, 1000)
        })

        const f2 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p2 runing')
               resolve(2)
           }, 1000)
        })

        // 使用回调形式
        f1().then(()=>{
            f2()
        })

 使用async、await的方案。

 const f1 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p1 runing')
               resolve(1)
           }, 1000)
        })

        const f2 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p2 runing')
               resolve(2)
           }, 1000)
        })

        // 使用async await
        async function asyncPromise(){
            await f1()
            f2()
        }

  使用reduce的方案,认为是最为优雅,但是最为难懂的。

  const f1 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p1 runing')
               resolve(1)
           }, 1000)
        })

        const f2 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p2 runing')
               resolve(2)
           }, 1000)
        })

        const arr = [f1, f2]
        const runPromiseInsequence = (array, value)=>array.reduce(
            (promiseChain, currentFunction)=>promiseChain.then(currentFunction),
            Promise.resolve(value)
        )
        runPromiseInsequence(arr, 'init')

  使用递归的方案

 const f1 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p1 runing')
               resolve(1)
           }, 1000)
        })

        const f2 = ()=>new Promise((resolve, reject)=>{
           setTimeout(()=>{
               console.log('p2 runing')
               resolve(2)
           }, 1000)
        })

        
        // 使用递归
        const arr = [f1, f2]
        function sequencePromise(arr){
           const pro = arr.shift()
           if(pro) {
            pro().then(()=>{
                sequencePromise(arr)
               })
           }
        }
        sequencePromise(arr)

以上四种,后两种可以不增加代码的情况就可以直接顺序执行多个promise。

而我把传统的和最后一种作为母题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐