promise.all的應用場景舉例
阿新 • • 發佈:2021-09-07
Promise.all方法
簡而言之:Promise.all( ).then( )適用於處理多個非同步任務,且所有的非同步任務都得到結果時的情況。
比如:使用者點選按鈕,會彈出一個彈出對話方塊,對話方塊中有兩部分資料呈現,這兩部分資料分別是不同的後端介面獲取的資料。
彈框彈出後的初始情況下,就讓這個彈出框處於資料載入中
的狀態,當這兩部分資料都從介面獲取到的時候,才讓這個資料載入中
狀態消失。讓使用者看到這兩部分的資料。
那麼此時,我們就需求這兩個非同步介面請求任務都完成的時候做處理,所以此時,使用Promise.all方法,就可以輕鬆的實現,我們來看一下程式碼寫法
程式碼附上
<template> <div class="box"> <el-button type="primary" plain @click="clickFn">點開彈出框</el-button> </div> </template> <script> exportdefault { name: "App", methods: { clickFn() { this.alertMask = true; // 開啟彈出框 this.loading = true; // 暫時還沒資料,所以就呈現loading載入中效果 // 第一個非同步任務 function asyncOne() { let async1 = new Promise(async (resolve, reject) => { setTimeout(() => { // 這裡我們用定時器模擬後端發請求的返回的結果,畢竟都是非同步的let apiData1 = "第一個介面返回資料啦"; resolve(apiData1); }, 800); }); return async1; } console.log("非同步任務一", asyncOne()); // 返回的是一個Promise物件 // 第二個非同步任務 function asyncTwo() { let async2 = new Promise(async (resolve, reject) => { setTimeout(()=> { let apiData2 = "第二個介面返回資料啦"; resolve(apiData2); }, 700); }); return async2; } console.log("非同步任務二", asyncTwo()); // 返回的是一個Promise物件 let paramsArr = [asyncOne(), asyncTwo()] // Promise.all方法接收的引數是一個數組,陣列中的每一項是一個個的Promise物件 // 我們在 .then方法裡面可以取到 .all的結果。這個結果是一個數組,陣列中的每一項 // 對應的就是 .all陣列中的每一項的請求結果返回的值 Promise .all(paramsArr) .then((value) => { console.log("Promise.all方法的結果", value); this.loading = true; // 現在有資料了,所以就關閉loading載入中效果 }); }, }, }; </script>