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

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

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

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

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

2 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以每分鐘發(fā)送1個(gè)包含20個(gè)請求的塊,或者每3秒將其間隔1個(gè)請求(這可能是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個(gè)電話:


rateLimitedRequests(bigArray, 1);

或每分鐘20個(gè):


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因?yàn)樗鼤谘舆t后執(zhí)行每個(gè)函數(shù)調(diào)用,而_.debounce將多個(gè)調(diào)用組合為一個(gè)調(diào)用??吹竭@個(gè)文章從鏈接的文檔


防抖動(dòng):把它看成是“分組多個(gè)事件之一”。試想一下,你回家,在電梯進(jìn)入,門正在關(guān)閉......,突然你的鄰居出現(xiàn)在大廳,并試圖跳上電梯。要有禮貌!并打開大門,他說:你去抖動(dòng)電梯離去??紤]到同樣的情況可以與第三人再次發(fā)生,等等...大概推遲起飛幾分鐘。


油門:將其視為閥門,它調(diào)節(jié)執(zhí)行流程。我們能確定的時(shí)間函數(shù)可以在一定時(shí)間內(nèi)被稱為最大數(shù)。所以在電梯比喻..你有足夠的禮貌,讓在持續(xù)10秒的人,但一旦延遲的推移,你必須去!


查看完整回答
反對 回復(fù) 2019-10-23
  • 2 回答
  • 0 關(guān)注
  • 599 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

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