javascript for循環+異步請求致使請求順序不一致

工做中遇到一個問題ios

for循環,再把循環出來的ID再進行二次請求axios

這就致使一個問題數組

請求結果返回順序不一致promise

緣由:異步請求會把回調事件放入微任務事件隊列,宏任務執行完畢再執行微任務,具體參考事件隊列機制dom

 

解決方法:異步

經過map方法進行循環請求spa

將異步請求方法封裝起來,返回一個promisecode

這樣將會返回一個具備多個promise的數組blog

經過promise.all()方法把promise包裝成一個新的promise實例隊列

 1 // 經過Promise把全部的異步請求放進事件隊列中
 2 getInfo(item ,index) {
 3     const ms = 1000 * Math.ceil(Math.random() * 3)
 4     return new Promise((resolve,reject) => {
 5         setTimeout(() => {
 6            axios.get(id).then((result) => {
 7                resolve(result)
 8            })
 9         }, ms)
10     })
11 }
12 
13 // 返回多個promise
14 let promise = arr.map((item,index) = > {
15     arr.forEach((item, index) => {
16         return getInfo(item, index)
17     })
18 })
19 // 對返回的promise數組進行操做
20 Peomise.all(promise).then((allData) => {
21     arr.forEach((item, index) => {
22         // ......
23     })
24 })
相關文章
相關標籤/搜索