1. 程式人生 > 其它 >使用promise實現併發控制

使用promise實現併發控制

在前端優化效能的時候, 我們可以考慮使用併發控制
比如首頁有10個併發請求, 先發送3個, 3箇中哪一個響應了, 立即傳送第4個, 直到第10個傳送完成

function limitLoad(urls, handler, limit) {
    const sequence = [].concat(urls)
    let promise = []
    promise = sequence.splice(0, limit).map((url, index) => {
        return handler(url).then(()=>{
            return
index }) }) let p = Promise.race(promise) // for迴圈給p賦值相當於.then().then()鏈式呼叫 for (let i= 0; i< sequence.length; i++) { p = p.then(res => { promise[res] = handler(sequence[i]).then(()=>{ return res }) return Promise.race(promise) }) } } const urls
=[ {info:'1', time:2000}, {info:'2', time:1000}, {info:'3', time:2000}, {info:'4', time:2000}, {info:'5', time:3000}, {info:'6', time:1000}, {info:'7', time:2000}, {info:'8', time:2000}, {info:'9', time:3000}, {info:'10', time:1000} ] function loadImg(url){ return new Promise((reslove, reject)=>{ console.log(url.info
+ '---start') setTimeout(()=>{ console.log(url.info, 'ok!!!') reslove() }, url.time) }) } limitLoad(urls, loadImg, 3)