promise處理併發請求

2021-10-23 19:32:09 字數 1869 閱讀 4901

asyncpool

=(poollimit, array, iteratorfn)

=>

// 每調一次enqueue,初始化乙個promise

const item = array[i++];

const p = promise.

resolve()

.then((

)=>

iteratorfn

(item, array));

// 放入promises陣列

ret.

push

(p);

// promise執行完畢,從executing陣列中刪除

const e = p.

then((

)=> executing.

splice

(executing.

indexof

(e),1)

);// 插入executing數字,表示正在執行的promise

executing.

push

(e);

// 使用promise.rece,每當executing陣列中promise數量低於poollimit,就例項化新的promise並執行

let r = promise.

resolve()

;if(executing.length >= poollimit)

// 遞迴,直到遍歷完array

* @params list - 要迭代的陣列

* @params limit - 併發數量控制數

* @params asynchandle - 對`list`的每乙個項的處理函式,引數為當前處理項,必須 return 乙個promise來確定是否繼續進行迭代

* @return - 返回乙個 promise 值來確認所有資料是否迭代完成

*/let

maplimit

=(list, limit, asynchandle)

=>)}

;let listcopy =

.concat

(list)

;let asynclist =

;// 正在進行的所有併發非同步操作

while

(limit--

)return promise.

all(asynclist)

;// 所有併發非同步操作都完成後,本次併發控制迭代完成

}

第三種的方式

//省略**

// 計數器

var count =0;

// 全域性鎖

var lock =

;var l = urls.length;

// 阻塞函式

function

block()

);}// 叫號機

function

next()

async

function

bao()if

(urls.length>0)

}for

(let i =

0; i < l; i++

)

Promise處理有依賴的連續請求

在沒有接觸到promise之前,如果有這樣的需求,先去前端需要非同步去請求第乙個介面,然後接收到返回的一些資料,然後利用得到的資料,去請求第二個介面,然後接收傳回來的資料,然後去請求第三個介面,這個時候我自己寫出來的 一定是ajax巢狀的一堆,寫出來的 可想而知,真的是太醜。我現在不敢說我對prom...

playframe 處理高併發請求

參考此例子進行優化 具某同事說,本來併發200就崩潰的 專案 輸出到tomcat 使用了以上配置,居然上到接近1000 下面是部分 public static void updatelivedata integer id,string nv,string f 這是controller的方法 publ...

如何處理重複請求 併發請求的

你可能會想到的是,只要請求有唯一的請求編號,那麼就能借用redis做這個去重 只要這個唯一請求編號在redis存在,證明處理過,那麼就認為是重複的 string key req12343456788 請求唯一編號 long expiretime 1000 1000毫秒過期,1000ms內的重複請求會...