<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
axios的響應錯誤攔截中,難免會對error.status做各種各樣的if判斷,又或者switch。為了防止枯燥乏味的生活(給自己挖坑,換一種姿勢去寫攔截
// 以下大概是日常碰到的操作,攔截響應,判斷status做相應操作 function login () { console.log('登陸邏輯') return promise.reject(error) } // 新增響應攔截器 axios.interceptors.response.use(function (response) { // 對響應資料做點什麼 return response; }, function (error) { if (error.status === 401) { // 401重新登入 console.log('未登陸') return login(error) } else if (error.status === 404) { console.log('404-什麼都沒') return promise.reject(error) } else if (error.status === 422) { console.log(error.response.data.message) return promise.reject(error) } else if (error.status === 500) { console.log('伺服器內部錯誤') return promise.reject(error) } else { // 其他請求,直接丟擲讓業務去處理 return promise.reject(error) } });
首先思考下怎麼實現這個東西
現在,已經在心中擬好了一個小輪子的五臟六腑。
// 定義個一個class class Enterclose { constructor () { // 維護管道陣列 this.pond = {} // 預設管道 this._default = null } /** * 收集管道 * callback(payload) * @param {any} sign 標記 * @param {Function|Object} callback 回撥函數|函數this * @return this * */ use (sign, callback) { return this } /** * 收集匹配失敗的管道 * callback(payload) * @param {Function} callback 回撥函數|函數this * @return this * */ default (callback) { this._default = callback return this } /** * 執行管道流 * @param {any} sign 標記 * @param {any} payload * @return */ start (sign, payload) { } }
以上把基本的api骨架寫好,然後再一個一個慢慢實現內部的邏輯。
首先是use,用來收集管道,需求中標記是唯一的,所以我們的this.ponds的結構是{標記: callback}
use (sign, callback) { this.ponds[sign] = callback return this }
其中我們需要一個方法用來啟動Enterclose
通過getCallback函數去篩選和標記匹配的管道,返回對應的函數。這樣一個消除if的小輪子就搞好啦
start (sign, payload) { const fn = this.getCallback(sign) if (fn) { return fn(payload) } } /** * 根據標記獲取函數 * @param {*} sign * @return {Function} */ getCallback (sign) { const key = Object.keys(this.ponds).find(key => key === sign) if (key) { return this.ponds[key] } else if (this._default) { return this._default } }
建立範例,用use和default收集管道,然後在攔截中通過start觸發判斷
const enterclose = new Enterclose() // 收集管道 enterclose .use(401, function (error) { console.log('未登陸') return login(error) }) .use(404, function (error) { console.log('404-什麼都沒') return promise.reject(error) }) .use(429, function (error) { console.log(error.response.data.message) return promise.reject(error) }) .use(500, function (error) { console.log('伺服器內部錯誤') return promise.reject(error) }) .default(function (error) { // 收集預設管道 return promise.reject(error) }) axios.interceptors.response.use(function (response) { // 對響應資料做點什麼 return response; }, function (error) { // 啟動 return enterclose.start(error.status, error) });
你也可以根據自己的場景做一些調整,例如支援Promise啊,或者說加一個finally函數,每次走管道最後都會呼叫這個回撥函數之類
到此這篇關於如何消除axios攔截中if的文章就介紹到這了,更多相關消除axios攔截的if內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45