我有一些代碼遍歷從數據庫查詢出來的列表,併爲該列表中的每個元素髮出HTTP請求。該列表有時可能是一個相當大的數字(以千計),並且我想確保我沒有訪問具有數千個併發HTTP請求的Web服務器。使用ES6的Promise.all()時限制併發性的最佳方式是什麼?
這段代碼的縮寫版本目前看起來是這樣的......
function getCounts() {
return users.map(user => {
return new Promise(resolve => {
remoteServer.getCount(user) // makes an HTTP request
.then(() => {
/* snip */
resolve();
});
});
});
}
Promise.all(getCounts()).then(() => { /* snip */});
此代碼是在節點4.3.2運行。要重申,可以管理Promise.all
,以便在任何特定時間只有一定數量的承諾正在進行中?
[限於承諾正在運行的併發]的可能重複(http://stackoverflow.com/q/38778723/1048572) – Bergi
不要忘記['Promise.all '管理承諾進展](http://stackoverflow.com/a/30823708/1048572) - 承諾自己做,'Promise.all'只是等待他們。 – Bergi
避免['Promise' constructor antipattern](http://stackoverflow.com/q/23803743/1048572)! – Bergi