第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

向一次只能處理20個請求的API發(fā)出多個請求

向一次只能處理20個請求的API發(fā)出多個請求

SMILET 2019-11-04 14:05:18
我有一個返回promise的方法,并且在內部該方法調用一個API,該API每分鐘只能有20個請求。問題是我有很多對象(大約300個),并且我想為每個對象調用API。目前,我有以下代碼:    const bigArray = [.....];    Promise.all(bigArray.map(apiFetch)).then((data) => {      ...    });但是它不處理時序約束。我希望我可以使用_.chunk和_.debounce之類的東西,lodash但是我無法解決這個問題。有人可以幫我嗎?
查看完整描述

2 回答

?
慕仙森

TA貢獻1827條經(jīng)驗 獲得超8個贊

您可以每分鐘發(fā)送1個包含20個請求的塊,或者每3秒將其間隔1個請求(這可能是API所有者更喜歡的)。


function rateLimitedRequests(array, chunkSize) {

  var delay = 3000 * chunkSize;

  var remaining = array.length;

  var promises = [];

  var addPromises = function(newPromises) {

    Array.prototype.push.apply(promises, newPromises);

    if (remaining -= newPromises.length == 0) {

      Promise.all(promises).then((data) => {

        ... // do your thing

      });

    }

  };

  (function request() {

    addPromises(array.splice(0, chunkSize).map(apiFetch));

    if (array.length) {

      setTimeout(request, delay);

    }

  })();

}

要每3秒撥打1個電話:


rateLimitedRequests(bigArray, 1);

或每分鐘20個:


rateLimitedRequests(bigArray, 20);

如果您喜歡使用_.chunk和1:_.debounce _.throttle


function rateLimitedRequests(array, chunkSize) {

  var delay = 3000 * chunkSize;

  var remaining = array.length;

  var promises = [];

  var addPromises = function(newPromises) {

    Array.prototype.push.apply(promises, newPromises);

    if (remaining -= newPromises.length == 0) {

      Promise.all(promises).then((data) => {

        ... // do your thing

      });

    }

  };

  var chunks = _.chunk(array, chunkSize);  

  var throttledFn = _.throttle(function() {

    addPromises(chunks.pop().map(apiFetch));

  }, delay, {leading: true});

  for (var i = 0; i < chunks.length; i++) {

    throttledFn();

  }

}

1您可能想要,_.throttle因為它會在延遲后執(zhí)行每個函數(shù)調用,而_.debounce將多個調用組合為一個調用。看到這個文章從鏈接的文檔


防抖動:可以將其視為“將多個事件組合在一起”。想象您回家,進入電梯,門正在關閉……突然間,您的鄰居出現(xiàn)在大廳里,試圖跳上電梯。要有禮貌!并為他打開門:您正在取消電梯的離開。考慮到第三人可能再次發(fā)生相同的情況,依此類推……可能會將出發(fā)時間延遲了幾分鐘。


油門:將其視為閥門,它調節(jié)執(zhí)行流程。我們可以確定某個函數(shù)在特定時間內可以被調用的最大次數(shù)。因此,在電梯類比中,您很有禮貌地允許人們進入10秒鐘,但是一旦延遲過去,您就必須走!


查看完整回答
反對 回復 2019-11-04
  • 2 回答
  • 0 關注
  • 905 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號