成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在限定并發(fā)數(shù)下用 Promise 并發(fā)完成請求

laoLiueizo / 1793人閱讀

摘要:這是一道用來熟練的題目,給定個,要求使用在限定并發(fā)數(shù)為的情況下完成請求。

這是一道用來熟練Promise的題目,給定N個URL,要求使用Promise在限定并發(fā)數(shù)為M(M < N) 的情況下完成請求。

class PromisePool {
  constructor(max, fn) {
    this.max = max; // 最大并發(fā)數(shù)
    this.fn = fn;   // 自定義的請求函數(shù)
    this.pool = []; // 并發(fā)池
    this.urls = []; // 剩余的請求地址
  }

  start(urls) {
    this.urls = urls;
    // 先循環(huán)把并發(fā)池塞滿
    while (this.pool.length < this.max) {
      let url = this.urls.shift();
      this.setTask(url);
    }
    // 利用Promise.race 方法來獲得并發(fā)池中某任務(wù)完成的信號
    let race = Promise.race(this.pool);
    return this.run(race);
  }

  run(race) {
    race
      .then(res => {
        // 每當(dāng)并發(fā)池跑完一個任務(wù),就再塞入一個任務(wù)
        let url = this.urls.shift();
        this.setTask(url);
        return this.run(Promise.race(this.pool));
      });
  }
  setTask(url) {
    if (!url) return;
    let task = this.fn(url);
    this.pool.push(task); // 將該任務(wù)推入pool并發(fā)池中
    console.log(`x1B[43m ${url} 開始,當(dāng)前并發(fā)數(shù):${this.pool.length}`);
    task.then(res => {
      // 請求結(jié)束后將該Promise任務(wù)從并發(fā)池中移除
      this.pool.splice(this.pool.indexOf(task), 1);
      console.log(`x1B[43m ${url} 結(jié)束,當(dāng)前并發(fā)數(shù):${this.pool.length}`);
    });
  }
}

// test
const URLS = [
  "bytedance.com",
  "tencent.com",
  "alibaba.com",
  "microsoft.com",
  "apple.com",
  "hulu.com",
  "amazon.com"
];
// 自定義請求函數(shù)
var requestFn = url => {
  return new Promise(resolve => {
    setTimeout(_ => {
      resolve(`任務(wù) ${url} 完成`);
    }, 1000*dur++)
  }).then(res => {
    console.log("外部邏輯 ", res);
  })
}

const pool = new PromisePool(3, requestFn); // 并發(fā)數(shù)為3
pool.start(URLs);

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106935.html

相關(guān)文章

  • 15 行代碼實現(xiàn)并發(fā)控制(javascript)

    摘要:而爬蟲一般用多線程來控制并發(fā),然而如果是爬蟲,由于其單線程無阻塞性質(zhì)以及事件循環(huán)機制,一般不用多線程來控制并發(fā)當(dāng)然也可以實現(xiàn)多線程,此處非重點不再多講,而是更加簡便地直接在代碼層級上實現(xiàn)并發(fā)。下面我們用行代碼實現(xiàn)一個并發(fā)控制的函數(shù)。 前言 首發(fā)于 github blog 做過爬蟲的都知道,要控制爬蟲的請求并發(fā)量,其實也就是控制其爬取頻率,以免被封IP,還有的就是以此來控制爬蟲應(yīng)用運...

    gyl_coder 評論0 收藏0
  • 小程序圖片合成:異步并發(fā)渲染→同步阻塞渲染

    摘要:故事開始了,小程序圖片合成真機測試時,會報錯。所以只能將異步并發(fā)改為同步阻塞式渲染。 showImg(https://segmentfault.com/img/remote/1460000013228074); 故事開始了,小程序canvas圖片合成 真機測試時,會報錯:getImageInfo failed 。也就是說,我這邊異步請求50張圖片,每張圖片都是通過getImageInf...

    zhoutao 評論0 收藏0
  • 微服務(wù)治理之如何優(yōu)雅應(yīng)對突發(fā)流量洪峰

    摘要:以上兩點同時滿足時則說明服務(wù)處于高負載狀態(tài),則進行自適應(yīng)降載。如果放行則返回,等待業(yè)務(wù)側(cè)執(zhí)行回調(diào)函數(shù)執(zhí)行指標(biāo)統(tǒng)計。當(dāng)前系統(tǒng)的最大并發(fā)數(shù)窗口單位時間內(nèi)的最大通過數(shù)量窗口單位時間內(nèi)的最小響應(yīng)時間。 為什么需要降載微服務(wù)集群中,調(diào)用鏈路錯綜復(fù)雜,作為服務(wù)提供者需要有一種保護自己的機制,防止調(diào)用方無腦調(diào)用壓垮自己,保證...

    Jeffrrey 評論0 收藏0
  • node.js 爬取招聘信息分析各職業(yè)錢途(爬蟲+動態(tài)IP代理+數(shù)據(jù)可視化分析)

    摘要:成功爬取了拉鉤網(wǎng)上多個招聘崗位的具體信息后,數(shù)據(jù)可視化并得出分析結(jié)果如下從整體看,北上廣深杭這五個城市前端工程師招聘崗位,北京是遙遙領(lǐng)先,是深圳的兩倍,是廣州的三倍,其次到上海,深圳,杭州,廣州居末。 前前言 本文首發(fā)于 github blog 不想看爬蟲過程只想看職位錢途數(shù)據(jù)分析請看這里:前端招聘崗位分析C++招聘崗位分析JAVA招聘崗位分析PHP招聘崗位分析Python招聘崗位分析...

    546669204 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<