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

JS面試之異步模擬超時重傳機制詳解

 更新時間:2022年10月08日 14:55:12   作者:前端蘭博  
這篇文章主要為大家介紹了JS面試之異步模擬超時重傳機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

前面我講解了兩篇有關(guān)異步的邏輯思維題目,一個是紅綠燈轉(zhuǎn)換,還有一個是異步并發(fā)限制。有小伙伴私信我說不過癮,希望還能再出一篇異步超時重傳的講解。為了滿足這位粉絲的小小要求(我尼瑪),我查詢了相關(guān)資料和面試題,確實發(fā)現(xiàn)這是某大腸面試的代碼設計題。不得不說這位粉絲發(fā)現(xiàn)的這個題目是相當亮眼,相當給力。

題目分析

超時重傳機制,看到這個詞語想必科班同學都十分十分熟悉吧。大家第一時間肯定會想到計算機網(wǎng)絡中tcp的超時重傳。不錯,此處的異步模擬超時重傳機制和計算機網(wǎng)絡的超時重傳原理是幾乎一樣的。二者的唯一區(qū)別就在于一個作用在tcp的可靠傳輸上,而本節(jié)我們的超時重傳是作用在前端請求數(shù)據(jù)接口上。

性感例子

正直18歲的單身狗小明,血氣方剛。他有一個小愛好喜歡在a網(wǎng)站上學習“外語”,既然是外語,那這個a網(wǎng)站的服務器應該在外國吧,網(wǎng)站a為了傳播外語文化,在數(shù)據(jù)接口上采用了超時重傳機制。假設最大請求次數(shù)是5次,每次最大請求延遲時間是5s。小明某天夜里又開始學起了外語,但是網(wǎng)速不好啊。

  • 他第一次打開a網(wǎng)站,延時6s,失敗次數(shù)1
  • 他不忍心放棄學習,繼續(xù)等待,網(wǎng)站繼續(xù)請求數(shù)據(jù),延時又6s,失敗次數(shù)2
  • 他決定在等等,幸運的是此處接口3s后返回外語資料,他開心死了。

上面是一個超時重傳的例子,如果數(shù)據(jù)請求次數(shù)在5次包含5的次數(shù)內(nèi)請求成功,則請求成功。否則一直請求,當請求次數(shù)大于5時,返回失敗。

代碼設計

//timer--一次請求的最大響應時間
//limit--最大超時請求次數(shù)
//fn-----資源加載函數(shù)
function load (times,limit,fn) {
  return new Promise((resolve,reject)=>{
    let num = 0//重傳的次數(shù)
    let statue = false//請求的狀態(tài)
    let timer = null//定時器
    //一次請求的統(tǒng)計
    function request() {
      let timers1 = Date.now()
      fn().then(res=>{
        let timers2 = Date.now()
        if(timers2-timers1<times){
          statue = true
          resolve(res)
        }
      })
    }
    //一開始就異步加載數(shù)據(jù)
    request()
    //定時器輪詢模擬超時重傳
    timer = setInterval(()=>{
      //請求成功了
      if(statue) {
        clearInterval(timer)
        return 
      }
      //請求次數(shù)超過限制,錯誤
      if(num>=limit) {
        clearInterval(timer)
        reject("請求次數(shù)過多")
        return 
      }
      //繼續(xù)請求
      console.log("重新請求中...")
      request()
      num++
    },times)
  })
}
//模擬資源請求
function fn() {
  return new Promise((resolve,reject)=>{
    setTimeout(() => {
      resolve("ok")
    }, 3000);
  })
}
//主函數(shù)調(diào)用
load(2000,5,fn)
  .then(msg=>{console.log(msg)})
  .catch(err=>{
    console.log(err)
  })

效果展示

核心講解

首先我們對問題進行拆解

  • 定義一個request,判斷一次接口請求,根據(jù)開始和結(jié)束時間戳判斷是否超時
  • 定義statue表示當前是否請求成功,定義count統(tǒng)計當前已經(jīng)超時重傳的次數(shù)
  • 開啟全局定時器輪詢的監(jiān)聽一次請求,定時器的回調(diào)就是判斷當前請求是否成功,如果成功直接返回數(shù)據(jù)并關(guān)閉全局定時器,如果最大請求次數(shù)超過了限制,直接返回錯誤。否則繼續(xù)輪詢請求接口。

以上就是JS面試之異步模擬超時重傳機制詳解的詳細內(nèi)容,更多關(guān)于JS面試異步模擬超時重傳的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS繼承與工廠構(gòu)造及原型設計模式詳解

    JS繼承與工廠構(gòu)造及原型設計模式詳解

    這篇文章主要為大家介紹了JS繼承與工廠構(gòu)造及原型設計模式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • JavaScript的八種數(shù)據(jù)類型

    JavaScript的八種數(shù)據(jù)類型

    這篇文章主要分享的是JavaScript的八種數(shù)據(jù)類型,ES5的時候,我們大家認知的數(shù)據(jù)類型是?6種的,但是ES6?中新增了一種?Symbol,谷歌67版本中還出現(xiàn)了一種?bigInt,是指安全存儲、操作大整數(shù),像下面文章我可沒就來看看這八種數(shù)據(jù)類型的詳細介紹吧
    2022-01-01
  • 圖片按比例縮放函數(shù)

    圖片按比例縮放函數(shù)

    圖片按比例縮放函數(shù)...
    2006-06-06
  • 基于JavaScript ES新特性let與const關(guān)鍵字

    基于JavaScript ES新特性let與const關(guān)鍵字

    這篇文章主要介紹了基于JavaScript ES新特性let與const關(guān)鍵字,let是ECMAScript 2015新增的一個關(guān)鍵字,用于聲明變量,const關(guān)鍵字用于聲明一個常量,更多詳細內(nèi)容,請需要的小伙伴參考下面文章的介紹,希望對你有所幫助
    2021-12-12
  • 微信小程序 地圖map實例詳解

    微信小程序 地圖map實例詳解

    這篇文章主要介紹了微信小程序 地圖map實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 淺談JavaScript作用域

    淺談JavaScript作用域

    這篇文章主要介紹了JavaScript作用域詳情,作用域的使用提高了程序邏輯的局部性,增強了程序的可靠性,減少了名字沖突,下面文章我們一起來了解更多的詳細內(nèi)容,需要的小伙伴也可以參考一下
    2021-12-12
  • 微信小程序的生命周期的詳解

    微信小程序的生命周期的詳解

    這篇文章主要介紹了微信小程序的生命周期的詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • JS中this的4種綁定規(guī)則詳解

    JS中this的4種綁定規(guī)則詳解

    如果你學過面向?qū)ο缶幊?,那你肯定知道干什么用的,如果你沒有學過,那么暫時可以不用看這篇文章,this既不指向函數(shù)自身,也不指函數(shù)的詞法作用域,具體怎么使用JS中的this,JS中的this綁定規(guī)則又是什么?
    2020-02-02
  • js 數(shù)組 fill() 填充方法

    js 數(shù)組 fill() 填充方法

    這篇文章主要介紹了js 數(shù)組 fill() 的填充方法,初始化數(shù)組的方法,但是初始化數(shù)組之后,數(shù)組中的每一項元素默認為 empty 空位占位,如何對數(shù)組這些空位添加默認的元素,ES6提供了 fill() 方法實現(xiàn)這一操作。本文總結(jié)數(shù)組 fill() 方法的詳細使用,需要的朋友可以參考一下
    2021-10-10
  • 微信小程序 實現(xiàn)列表項滑動顯示刪除按鈕的功能

    微信小程序 實現(xiàn)列表項滑動顯示刪除按鈕的功能

    這篇文章主要介紹了微信小程序列表項滑動顯示刪除按鈕的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論