欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解JavaScript如何控制并發(fā)請(qǐng)求數(shù)量

 更新時(shí)間:2024年01月15日 09:38:10   作者:gnip  
某些情況下,我們可能需要對(duì)需要執(zhí)行的多個(gè)異步任務(wù)進(jìn)行異步數(shù)量控制,只允許固定數(shù)量的任務(wù)執(zhí)行,本文為大家整理了JS控制并發(fā)請(qǐng)求數(shù)量的相關(guān)代碼,希望對(duì)大家有所幫助

概述

某些情況下,我們可能需要對(duì)需要執(zhí)行的多個(gè)異步任務(wù)進(jìn)行異步數(shù)量控制,只允許固定數(shù)量的任務(wù)執(zhí)行,等待其中某些任務(wù)完成后,繼續(xù)追加異步任務(wù),直到將緩沖隊(duì)列填滿,最后執(zhí)行完畢再停止。

代碼

class BufferControl {
  bufferList = []; //緩沖隊(duì)列
  maxLen = 1; //當(dāng)前允許執(zhí)行的最大并發(fā)數(shù)量
  currentQueenCount = 0; //當(dāng)前正在執(zhí)行的任務(wù)數(shù)量
  add(fn) {
    this.bufferList.push(fn);
    this.run();
  }

  run() {
    if (!this.bufferList.length) {
      return;
    }
    while (this.bufferList.length && this.currentQueenCount < this.maxLen) {
      let fn = this.bufferList.shift();
      this.currentQueenCount++;
      fn().then(() => {
        this.currentQueenCount--;
        this.run();
      });
    }
  }
}

let queen = new BufferControl();

// 定義幾個(gè)異步任務(wù)
let fn1 = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('fn1', 1000);
      resolve();
    }, 1000);
  });
};
let fn2 = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('fn2', 2000);
      resolve();
    }, 1000);
  });
};
let fn3 = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('fn3', 3000);
      resolve();
    }, 1000);
  });
};
let fn4 = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('fn4', 4000);
      resolve();
    }, 1000);
  });
};
// 追加到緩沖隊(duì)列中
queen.add(fn1);
queen.add(fn2);
queen.add(fn3);
queen.add(fn4);

效果

最后的效果為每隔1秒打印一次異步任務(wù)的結(jié)果,4秒后執(zhí)行完畢全部異步任務(wù)。

如果我們吧屬性maxLen改為2,則會(huì)共計(jì)耗時(shí)2秒完成打印,每秒分別打印兩次任務(wù)。

總結(jié)

當(dāng)然,異步任務(wù)的個(gè)數(shù)和時(shí)間都不定,我們可以根據(jù)自己的需求,自行設(shè)置,最重要還是對(duì)Promise的深入理解.

到此這篇關(guān)于詳解JavaScript如何控制并發(fā)請(qǐng)求數(shù)量的文章就介紹到這了,更多相關(guān)JavaScript控制并發(fā)請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論