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的方案。

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

  使用reduce的方案,認為是最為優雅,但是最為難懂的。

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

  使用遞歸的方案

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

以上四種,后兩種可以不增加代碼的情況就可以直接順序執行多個promise。

而我把傳統的和最后一種作為母本方案:作為典型的解決方案。

這幾天一個心得:探索新的解決方案是很好的拓展知識的手段。主動的探索方法可以是多問幾個為什么,有什么好處,以及嘗試其它解決方案。針對方法可以考慮參數為Promise或函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM