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

資訊專欄INFORMATION COLUMN

移動端不定期更新token方案

binta / 2240人閱讀

摘要:客戶端需要不定期更新,同時得保證在發(fā)送更新同時其他網(wǎng)絡(luò)請求掛起,否則會報失效。待新回來之后,重新發(fā)起掛起的請求。

客戶端需要不定期更新token,同時得保證在發(fā)送更新token同時其他網(wǎng)絡(luò)請求掛起,否則會報token失效。待新token回來之后,重新發(fā)起掛起的請求。

應(yīng)服務(wù)端要求,更新token請求時,老token立刻失效

目錄

模擬網(wǎng)絡(luò)請求封裝(模擬)

使用演示

結(jié)果打印

小結(jié)

模擬網(wǎng)絡(luò)請求封裝(模擬)
let token = 1 當前請求使用的token
let refreshToken = false // 是否處于更新token中
let subscribers = []; // 掛起的請求數(shù)組

/**
 * 網(wǎng)絡(luò)請求入口
 */
function callApi (data, time = 1000) {
  console.log("0000callApi=== type:" + data.type + "  token:" + token)
  if (refreshToken) {
    const retryOriginalRequest = new Promise((resolve) => {
                addSubscriber(()=> {
                    resolve(request(time, data.type))
                })
            });
            return retryOriginalRequest;
  }
  // 判斷是否是執(zhí)行更新token
  if (data && (data.type == "refreshToken")) {
     const newData = request(time, data.type)
     refreshToken = true
     return newData
  }
  return request(time, data.type)
}

/**
 * 執(zhí)行網(wǎng)絡(luò)請求
 */
function request(ms, type) {
  console.log("1111request=== type:" + type + "  token:" + token)
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms, type);
  });
}

/**
 * token更新后,重新發(fā)起掛起的請求
 */
function onAccessTokenFetched() {
    subscribers.forEach((callback)=>{
        console.log("重新請求")
        callback();
    })
    refreshToken = false
    subscribers = [];
}

/**
 * push掛起的請求
 * @param callback 掛起的請求
 */
function addSubscriber(callback) {
    subscribers.push(callback)
}
使用演示:
// before
callApi({type: "first", token}, 1000).then(consoleResponse)

// Todo
callApi({type: "refreshToken", token}, 2000).then((v) => {
  token = 2
  onAccessTokenFetched()
  consoleResponse(v)
})

// doing
callApi({type: "second", token}, 2000).then(consoleResponse)
callApi({type: "third", token}, 2000).then(consoleResponse)
callApi({type: "four", token}, 2000).then(consoleResponse)
callApi({type: "five", token}, 2000).then(consoleResponse)

// after
setTimeout(() => callApi({type: "six", token}, 2000).then(consoleResponse), 5000)


function consoleResponse (v) {
  console.log("2222response===type:" + v + " token:" + token)
}
結(jié)果打印
"0000callApi=== type:first  token:1"
"1111request=== type:first  token:1"
"0000callApi=== type:refreshToken  token:1"
"1111request=== type:refreshToken  token:1"
"0000callApi=== type:second  token:1"
"0000callApi=== type:third  token:1"
"0000callApi=== type:four  token:1"
"0000callApi=== type:five  token:1"
"2222response===type:first token:1"
"重新請求"
"1111request=== type:second  token:2"
"重新請求"
"1111request=== type:third  token:2"
"重新請求"
"1111request=== type:four  token:2"
"重新請求"
"1111request=== type:five  token:2"
"2222response===type:refreshToken token:2"
"2222response===type:second token:2"
"2222response===type:third token:2"
"2222response===type:four token:2"
"2222response===type:five token:2"
"0000callApi=== type:six  token:2"
"1111request=== type:six  token:2"
"2222response===type:six token:2"
小結(jié)

本案例主要是模擬流程,算是對這次改造封裝網(wǎng)絡(luò)請求的思路,不對地方各位大神多多指點

真正用于網(wǎng)絡(luò)請求的過程中,需要對請求超時和請求出錯的處理,超時和出錯都需要重置更新token標識,重起發(fā)起掛起的網(wǎng)絡(luò)請求

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

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

相關(guān)文章

  • API網(wǎng)關(guān)設(shè)計(一)之Token多平臺身份認證方案

    摘要:網(wǎng)關(guān)設(shè)計一之多平臺身份認證方案隨著的發(fā)展現(xiàn)如今早已不是當年的登陸單一模式,而不久的到來又會帶來無人車等其他設(shè)備的接入。所以為了應(yīng)對將來的時代的變化,一個好的多平臺認證登陸方案是切實所需。 API網(wǎng)關(guān)設(shè)計(一)之Token多平臺身份認證方案 隨著4g的發(fā)展現(xiàn)如今早已不是當年的web登陸單一模式,而不久5g的到來又會帶來無人車等其他設(shè)備的接入。所以為了應(yīng)對將來的時代的變化,一個好的多平臺認...

    leon 評論0 收藏0
  • 優(yōu)秀博文收藏(定期更新

    摘要:我的書簽我的書簽謹慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標注工具模擬請求類深入淺出布局你所不知道的動畫技巧與細節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...

    sunsmell 評論0 收藏0
  • 優(yōu)秀博文收藏(定期更新

    摘要:我的書簽我的書簽謹慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標注工具模擬請求類深入淺出布局你所不知道的動畫技巧與細節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...

    zhangfaliang 評論0 收藏0
  • 前后分離——token超時刷新策略

    摘要:實現(xiàn)目標延長過期時間活躍用戶在過期時,在用戶無感知的情況下動態(tài)刷新,做到一直在線狀態(tài)不活躍用戶在過期時,直接定向到登錄頁登錄返回字段如何簽發(fā),請看上一篇推文,這里不做過多介紹。如果你有更好的做法,歡迎留言告知我,謝謝啦。 前言 記錄一下前后端分離下————token超時刷新策略! 需求場景 昨天發(fā)了一篇記錄 前后端分離應(yīng)用——用戶信息傳遞 中介紹了token認證機制,跟幾位群友討論了...

    hatlonely 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<