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

基于JS實現帶并發(fā)限制的異步調度器

 更新時間:2023年05月12日 08:19:57   作者:霍格沃茨魔法師  
這篇文章主要為大家詳細介紹了如何基于JS實現帶并發(fā)限制的異步調度器,文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考下

題目描述

JS實現一個帶并發(fā)限制的異步調度器scheduler,保證同時運行的任務最多有兩個。

例如目前有4個任務,完成時間分別為,1000ms,500ms,300ms,400ms

那么在該調度器中的執(zhí)行完成順序應該為2、3、1、4.

因為1、2先進入隊列中,2完成則輸出2,3進入,3完成輸出3,此時為800ms,4進入后的200ms,1完成輸出1,而后4完成輸出4.

實現最多兩個任務同時運行。

代碼調用模板大概是:

class Scheduler{
    add(promiseCreator){.....}
}
// 設置一個以每time秒執(zhí)行異步任務的定時器
const timeout = (time) => {
  new Promise(resolve => {
    setTimeout(resolve,time)
  })
}
// 實例
const scheduler = new Scheduler()
const addTask = (time,order)=>{
    scheduler.add(()=>{ //調用實例的方法
        timeout(time) //每time秒執(zhí)行一下任務(其實每一秒就行->time=1000ms即可)
    })
}

emmmmm我先來分析下....剛看這題有點懵,

通俗點:有個只能同時執(zhí)行倆任務的隊列,正在以每time秒執(zhí)行這些任務,且任務按照順序進入隊列。

那,同時運行的任務不能超過兩個,是不是每次運行一個任務時就放進數組中,判斷任務的length是否小于2,在大于0且小于2的情況下就即刻執(zhí)行該promise函數。

欸嘿,那運行兩個任務的時候怎么辦?要對promise函數進行一個選型,不能用一般的promise.then咯,在這同時運行的兩個任務中需要有一個先后判斷,哪個先執(zhí)行完,需要下一個任務接替執(zhí)行的,所以這當中存在一個“競賽”關系,選擇使用promise.race咯。(ps:這倆任務給我卷起來?。。。。?/p>

確認一下捏,有一個任務在隊列中的情況時,只需要執(zhí)行該任務,and執(zhí)行完從隊列中刪除就好了。

but有兩個的時候就要判斷遼,只要隊列中的size等于/大于2,就要進行promise.race的賽跑執(zhí)行,finally執(zhí)行完再去add下一個(promise任務)進來接著卷~。

就醬紫,寫代碼叭~

class Scheduler{
  queue = new Set<Promise<any>>() //去重的promise隊列~
  add(promiseCreator:()=>Promose<any>){ //每次用來加任務的方法~~
      if(this.queue.size>0 && this.queue.size<2){
          const promise = promiseCreator()
          this.queue.add(promise)
          promise.finally(()=>{
              this.queue.delete(promise)
          })
          return promise
      }
      // 只要到了2個任務 就開始race這倆任務
      // race出個結果再繼續(xù)放下一個(doge)卷起來
      const queueArr = []
      this.queue.forEach(item => queueArr.push(item)) // 放進數組中~
      return Promise.race(queueArr).finally(this.add(promiseCreator))
  }
}

get!,最后再調用下可以查看結果啦。

addTask(1000,1)
addTask(500,2)
addTask(300,3)
addTask(400,4)

快看看是不是2、3、1、4叭~

到此這篇關于基于JS實現帶并發(fā)限制的異步調度器的文章就介紹到這了,更多相關JS異步調度器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JS基于正則截取替換特定字符之間字符串操作示例

    JS基于正則截取替換特定字符之間字符串操作示例

    這篇文章主要介紹了JS基于正則截取替換特定字符之間字符串操作方法,結合具體實例形式分析了JS基于正則實現針對特殊字符、數字等字符串類型的截取操作相關技巧,需要的朋友可以參考下
    2017-02-02
  • fabric.js實現diy明信片功能

    fabric.js實現diy明信片功能

    這篇文章主要為大家詳細介紹了fabric.js實現diy明信片功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Javascript循環(huán)綁定事件的示例代碼

    Javascript循環(huán)綁定事件的示例代碼

    我們先看一個關于Javascript利用循環(huán)綁定事件的例子
    2008-10-10
  • js 實現在2d平面上畫8的方法

    js 實現在2d平面上畫8的方法

    今天小編就為大家分享一篇js 實現在2d平面上畫8的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • JavaScript安全加密之禁止別人調試自己的前端頁面代碼實現

    JavaScript安全加密之禁止別人調試自己的前端頁面代碼實現

    這篇文章主要為大家介紹了JavaScript安全加密之如何禁止別人調試自己的前端頁面代碼實現,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • AngularJs中Bootstrap3 datetimepicker使用實例

    AngularJs中Bootstrap3 datetimepicker使用實例

    這篇文章主要為大家詳細介紹了AngularJs中Bootstrap3 datetimepicker使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 另類網頁中添加運行效果

    另類網頁中添加運行效果

    另類網頁中添加運行效果...
    2006-12-12
  • js顯示動態(tài)時間的方法詳解

    js顯示動態(tài)時間的方法詳解

    這篇文章主要介紹了js顯示動態(tài)時間的方法,較為詳細的分析了javascript中Date對象的常用方法及功能,并結合實例形式分析了JS時間顯示功能,需要的朋友可以參考下
    2016-08-08
  • 自用js開發(fā)框架小成 學習js的朋友可以看看

    自用js開發(fā)框架小成 學習js的朋友可以看看

    前段時間項目需要用到js樹,找了好多都不符合項目需求,后來發(fā)現了梅花雪樹和js框架,類似C#名稱空間的用法讓我眼前一亮,遂拿來主義,讀了幾遍代碼后就開工了(我是個急性子呵呵),完成了大部分,最近才找出來測試了下。
    2010-11-11
  • javascript jscroll模擬html元素滾動條

    javascript jscroll模擬html元素滾動條

    這里是自己在工作不太忙的時候寫出來了一個用戶可以自定義的滾動條jscroll,以下簡稱jscroll。jscroll默認只提供一種滾動條樣式,部分樣式來自google webstore ,其中有部分css3樣式主要用于實現圓角,陰影效果
    2012-12-12

最新評論