promise实现多个请求并行串行执行
生活随笔
收集整理的這篇文章主要介紹了
promise实现多个请求并行串行执行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
早上查資料,偶然發現這個話題,發現自己并不會,于是乎,下來研究了一下。
想想之前我們用jquery寫請求的時候,要實現請求的串行執行,我們可能是這么做的。
$.ajax({url: '',data: '',success: function (data) {$.ajax({url: '',data: '',success: function (data) {$.ajax({// 如此一層嵌套一層})}}) }
})
回掉嵌套的這么深,看起來很痛苦啊,于是乎我們的promise出現啦,完美的解決我們的回掉地獄~
使用promise實現==串行==很簡單,調用promise.all()方法就好
那如何比較優雅的實現幾個操作的==串行==吶?
在promise中返回一個promise對象就是一個串行。
下面我們來簡單實現一個。
下面/*** 創建promise* @param {Number} value */
function makePromise (value) {return new Promise((resolve) => {setTimeout(() => {resolve(value);}, Math.random() * 1000)})
}
/*** 打印結果* @param {Number} value */
function print (value) {return value
}let promises = [1, 3, 4, 5, 6].map((item, index) => {return makePromise(item)
});// 并行執行
Promise.all(promises)
.then(() => {console.log('done')
})
.catch(() => {console.log('error')
})// 串行執行
let parallelPromises = promises.reduce((total, currentValue) => total.then(() => currentValue.then(print)),Promise.resolve()
)parallelPromises
.then(() => {// console.log('done')
})
.catch(() => {console.log('done')
})// 順帶復習一下reduce方法reduce((total, currentValue, currentIndex, arr) => {}, initialValue)
let arr1 = [1, 2, 3, 4, 5]
let res = arr1.reduce((total, currentValue, currentIndex, arr) => {return total + currentValue
});
轉載于:https://www.cnblogs.com/running1/p/9023427.html
總結
以上是生活随笔為你收集整理的promise实现多个请求并行串行执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄山风景区一日游攻略和费用
- 下一篇: 求一个小清新qq网名女生!