摘要:客戶端需要不定期更新,同時得保證在發(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
摘要:網(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)對將來的時代的變化,一個好的多平臺認...
摘要:我的書簽我的書簽謹慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標注工具模擬請求類深入淺出布局你所不知道的動畫技巧與細節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...
摘要:我的書簽我的書簽謹慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標注工具模擬請求類深入淺出布局你所不知道的動畫技巧與細節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...
摘要:實現(xiàn)目標延長過期時間活躍用戶在過期時,在用戶無感知的情況下動態(tài)刷新,做到一直在線狀態(tài)不活躍用戶在過期時,直接定向到登錄頁登錄返回字段如何簽發(fā),請看上一篇推文,這里不做過多介紹。如果你有更好的做法,歡迎留言告知我,謝謝啦。 前言 記錄一下前后端分離下————token超時刷新策略! 需求場景 昨天發(fā)了一篇記錄 前后端分離應(yīng)用——用戶信息傳遞 中介紹了token認證機制,跟幾位群友討論了...
閱讀 2270·2023-04-25 23:15
閱讀 1927·2021-11-22 09:34
閱讀 1558·2021-11-15 11:39
閱讀 961·2021-11-15 11:37
閱讀 2156·2021-10-14 09:43
閱讀 3498·2021-09-27 13:59
閱讀 1509·2019-08-30 15:43
閱讀 3468·2019-08-30 15:43