循環(huán)多個 Promise 異步函數

  1. 了解Promise
mounted(){
      // 1. 基本用法  執(zhí)行完testPromise 后執(zhí)行 testPromise1  整個執(zhí)行完 用了 9 秒
      this.testPromise().then((res) => {
            console.log(res)
            this.testPromise1().then((res1) => {
                console.log(res1)
            }).catch((err1) => {
                console.log(err1)
            })
        }).catch((err) => {
            console.log(err)
        })
        //輸出   
        // 三秒執(zhí)行結果
        // 三秒后的輸出結果
        // 六秒執(zhí)行結果
        // 六秒后的輸出結果
    
        // 2. 都知道promise構造函數是可以在函數的后面 無線 .then  但是.then 怎么拿到上一個.then的返回值呢?
        //  錯誤用法  此用法輸出順序為   三秒執(zhí)行結果  三秒后的輸出結果  六秒執(zhí)行結果  六秒后的輸出結果  undefined 
        // 執(zhí)行完成  需要 9秒
        this.testPromise().then((res) => {
            console.log(res)
             // 錯誤用法 then 里面接受不到 testPromise1 的 resolve值
            return this.testPromise1().then((res1) => {
                console.log(res1)
            }).catch((err1) => {
                console.log(err1)
            })
        }).then((res) => {
            console.log(res)   //undefined
        })
        //  正確用法  打印順序為  三秒執(zhí)行結果  三秒后的輸出結果  六秒執(zhí)行結果  六秒后的輸出結果  
        //  執(zhí)行完成  需要 9秒
        this.testPromise().then((res) => {
            console.log(res)
            return this.testPromise1()
        }).then((res) => {
            console.log(res)
        })
      
        // 3. Promise.all 的用法
        // all 中的兩個promise異步 是同時開始執(zhí)行的  then中的返回值是等待最后一個執(zhí)行完才會輸出結果
        //  執(zhí)行順序為  三秒執(zhí)行結果  六秒執(zhí)行結果   ["三秒后的輸出結果", "六秒后的輸出結果"]  
        //  執(zhí)行完成  需要 6秒
        Promise.all([this.testPromise(),this.testPromise1()]).then((res) => {
            //這里輸出的 res 是testPromise(),testPromise1()  resolve 返回值的 集合
            console.log(res)
        })

        // 4. Promise.race的用法
        //race 中的兩個promise異步 是同時開始執(zhí)行的,then中的返回值是最先完成異步的返回值
        //這個方法的使用場景:可用于超時操作,設置一個請求超時的時間,如果先返回超時的函數,說明超時
        // 執(zhí)行 順序  三秒執(zhí)行結果  三秒后的輸出結果  六秒執(zhí)行結果
         //  執(zhí)行完成  需要 6秒
        Promise.race([this.testPromise(),this.testPromise1()]).then((res) => {
            //res 是最先執(zhí)行完異步所返回的值
            console.log(res)
        })
},
methods: {
    testPromise(){
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    console.log('三秒執(zhí)行結果')
                    resolve('三秒后的輸出結果')
                }, 3000)
            })
        },
        testPromise1(){
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    console.log('六秒執(zhí)行結果')
                    resolve('六秒后的輸出結果')
                }, 6000)
            })
        }
}
  1. 循環(huán)多個 Promise 異步函數
// 輸出結果為  [ 0, 1, 2 ]  執(zhí)行了 3 秒
// 此方法用在  一個循環(huán)體中,拿到每個異步請求返回的值 , 并等待循環(huán)中的 所有異步函數執(zhí)行完,再進行下一步操作!
//  如 node.js 中 拿到購物車表的數據,只有商品的id ,沒有商品的具體信息, 需要去遍歷購物車的表, 再用每一個商品id 去遍歷商品表,去拿商品具體信息!
mounted(){
        let array = []
        for(let i=0; i<3; i++){
            array.push(this.testForPromise(i))
        }
        Promise.all(array).then((res) => {
            console.log(res)   // [ 0, 1, 2 ]
        })
},
methods:{
        testForPromise(num){
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(num)
                }, 3000)
            })
        }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容