国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

laoLiueizo / 1784人閱讀

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

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

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

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

  run(race) {
    race
      .then(res => {
        // 每當(dāng)并發(fā)池跑完一個(gè)任務(wù),就再塞入一個(gè)任務(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} 開(kāi)始,當(dāng)前并發(fā)數(shù):${this.pool.length}`);
    task.then(res => {
      // 請(qǐng)求結(jié)束后將該P(yáng)romise任務(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"
];
// 自定義請(qǐng)求函數(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106935.html

相關(guān)文章

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

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

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

    摘要:故事開(kāi)始了,小程序圖片合成真機(jī)測(cè)試時(shí),會(huì)報(bào)錯(cuò)。所以只能將異步并發(fā)改為同步阻塞式渲染。 showImg(https://segmentfault.com/img/remote/1460000013228074); 故事開(kāi)始了,小程序canvas圖片合成 真機(jī)測(cè)試時(shí),會(huì)報(bào)錯(cuò):getImageInfo failed 。也就是說(shuō),我這邊異步請(qǐng)求50張圖片,每張圖片都是通過(guò)getImageInf...

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

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

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

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

    546669204 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<