中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

手表網(wǎng)站制作照片網(wǎng)絡(luò)營(yíng)銷的核心

手表網(wǎng)站制作照片,網(wǎng)絡(luò)營(yíng)銷的核心,搜索網(wǎng)站怎么做的,wordpress模板更換這兩個(gè)功能都是用攔截器實(shí)現(xiàn)。 前景提要: ts 簡(jiǎn)易封裝 axios,統(tǒng)一 API 實(shí)現(xiàn)在 config 中配置開關(guān)攔截器 全局錯(cuò)誤處理 在構(gòu)造函數(shù)中,添加一個(gè)響應(yīng)攔截器即可。在構(gòu)造函數(shù)中注冊(cè)攔截器的好處是,無論怎么實(shí)例化封裝類&#xff0c…

在這里插入圖片描述

這兩個(gè)功能都是用攔截器實(shí)現(xiàn)。

前景提要:
ts 簡(jiǎn)易封裝 axios,統(tǒng)一 API
實(shí)現(xiàn)在 config 中配置開關(guān)攔截器

全局錯(cuò)誤處理

在構(gòu)造函數(shù)中,添加一個(gè)響應(yīng)攔截器即可。在構(gòu)造函數(shù)中注冊(cè)攔截器的好處是,無論怎么實(shí)例化封裝類,這個(gè)錯(cuò)誤攔截器都會(huì)被注冊(cè)進(jìn)實(shí)例。

其中有個(gè)注意點(diǎn),就是請(qǐng)求取消。取消請(qǐng)求會(huì)導(dǎo)致響應(yīng) promise 狀態(tài)為 rejected,這樣就會(huì)觸發(fā)響應(yīng)攔截器的 onRejected 回調(diào)。因此要單獨(dú)處理請(qǐng)求的請(qǐng)求情況,將它與請(qǐng)求錯(cuò)誤區(qū)分開來。

class HttpRequest {private readonly instance: AxiosInstance;constructor(config: MyAxiosRequestConfig) {this.instance = axios.create(config);// axios http 錯(cuò)誤處理(超出 2xx 范圍的 http 狀態(tài)碼都會(huì)觸發(fā)該函數(shù))this.instance.interceptors.response.use(null, (error: AxiosError) => {// 手動(dòng)取消請(qǐng)求會(huì)導(dǎo)致“錯(cuò)誤”觸發(fā)if (error.message === "canceled") alert("請(qǐng)求取消成功");const { response } = error;// 1. 請(qǐng)求超時(shí) && 網(wǎng)絡(luò)錯(cuò)誤單獨(dú)判斷,因?yàn)闆]有 responseif (error.message.indexOf("timeout") !== -1) alert("請(qǐng)求超時(shí)!請(qǐng)您稍后重試");if (error.message.indexOf("Network Error") !== -1) alert("網(wǎng)絡(luò)錯(cuò)誤!請(qǐng)您稍后重試");// 2. 根據(jù) http 服務(wù)器響應(yīng)的錯(cuò)誤狀態(tài)碼,做不同的處理if (response) {switch (response.status) {case 404:alert("你所訪問的資源不存在!");break;case 500:alert("服務(wù)異常!");break;default:alert("請(qǐng)求失敗!");}}// 3. 服務(wù)器結(jié)果都沒有返回(可能服務(wù)器錯(cuò)誤可能客戶端斷網(wǎng)),斷網(wǎng)處理:也可以跳轉(zhuǎn)到斷網(wǎng)頁面if (!window.navigator.onLine) alert("服務(wù)器錯(cuò)誤或者無網(wǎng)絡(luò)"); // router.replace("/500");throw error;});}
}

取消請(qǐng)求

axios 取消請(qǐng)求的方式

axios 取消請(qǐng)求有兩種 api。一種是 AbortController,一種是古老的 CancelToken ,已經(jīng)被棄用了。

AbortController - Web API 接口參考 | MDN

我們主要使用第一種方式:

  1. 實(shí)例化取消控制器接口,控制器對(duì)象有一個(gè)信號(hào)標(biāo)記signal
  2. 將該標(biāo)記配置給 axios 同名的 signal配置
  3. 控制器對(duì)象調(diào)用abort()方法就能取消被標(biāo)記了的請(qǐng)求。
const controller = new AbortController();axios.get('/foo/bar', {signal: controller.signal
}).then(function(response) {//...
});
// 取消請(qǐng)求
controller.abort()

封裝取消請(qǐng)求功能

取消請(qǐng)求也是個(gè)基礎(chǔ)功能,因此和全局錯(cuò)誤攔截器一樣在構(gòu)造函數(shù)中注冊(cè)攔截器。

取消請(qǐng)求:

  1. 為每一個(gè)請(qǐng)求生成一個(gè)控制器 controller,并添加 signal
  2. 維護(hù)一個(gè) map,以 url 為 key,對(duì)應(yīng)的 controller 為 value
  3. 要取消哪個(gè)請(qǐng)求就通過 url,獲取它的 controller 來取消
  4. 在全局響應(yīng)攔截器中,給所有請(qǐng)求添加 signal,并在請(qǐng)求結(jié)束后從 map 中剔除該 url 對(duì)應(yīng)的 controller

封裝類暴露兩個(gè)方法:

  1. 取消全部請(qǐng)求
  2. 根據(jù) url 取消請(qǐng)求
class HttpRequest {private readonly instance: AxiosInstance;private readonly abortControllerMap: Map<string, AbortController>;constructor(config: MyAxiosRequestConfig) {this.instance = axios.create(config);// 為每個(gè)請(qǐng)求都生成一個(gè) signal,并以 url 為 key 添加入 mapthis.instance.interceptors.request.use(config => {// 如果具體方法中設(shè)置了 signal,這里就不再添加,避免覆蓋。if (config.signal) return config;const controller = new AbortController();config.signal = controller.signal;const url = config.url || "";this.abortControllerMap.set(url, controller);return config;},(err: AxiosError) => {throw err;});// 響應(yīng)完,從map中去除 urlthis.instance.interceptors.response.use(res => {const url = res?.config.url || "";this.abortControllerMap.delete(url);return res;},(err: AxiosError) => {const url = err?.config?.url || "";this.abortControllerMap.delete(url);throw err;});}/*** 取消全部請(qǐng)求*/cancelAllRequest() {for (const [, controller] of this.abortControllerMap) {controller.abort();}this.abortControllerMap.clear();}/*** 取消指定的請(qǐng)求* (并發(fā)上傳文件的url通常是一樣的,通過url取消請(qǐng)求會(huì)取消所有上傳操作,故此方法不宜用來取消上傳請(qǐng)求)* @param url 待取消的請(qǐng)求URL*/cancelRequest(url: string | string[]) {const urlList = Array.isArray(url) ? url : [url];urlList.forEach(_url => {this.abortControllerMap.get(_url)?.abort();this.abortControllerMap.delete(_url);});}
}
http://www.risenshineclean.com/news/41114.html

相關(guān)文章:

  • 購物網(wǎng)站排行nba季后賽最新排名
  • 做返利網(wǎng)站能賺錢aso排名優(yōu)化
  • 做的比較好的官方網(wǎng)站上海百度推廣方案
  • 珠海做網(wǎng)站哪家專業(yè)seo sem論壇
  • 如何做網(wǎng)站的搜索欄網(wǎng)絡(luò)營(yíng)銷的推廣方法有哪些
  • 自己搭建服務(wù)器做網(wǎng)站91手機(jī)用哪個(gè)瀏覽器
  • 網(wǎng)站優(yōu)化主旨百度廣告推廣收費(fèi)標(biāo)準(zhǔn)
  • 武漢專業(yè)網(wǎng)站建設(shè)zz51上海網(wǎng)站制作開發(fā)
  • 競(jìng)網(wǎng)做的網(wǎng)站交換鏈接營(yíng)銷成功案例
  • 做網(wǎng)站與考研學(xué)技術(shù)包分配的培訓(xùn)機(jī)構(gòu)
  • WordPress方糖無錫網(wǎng)站建設(shè)優(yōu)化公司
  • 專業(yè)的團(tuán)隊(duì)網(wǎng)站建設(shè)引擎搜索入口
  • 室內(nèi)裝修設(shè)計(jì)圖紙seo快速軟件
  • 外國(guó)人做外貿(mào)都會(huì)瀏覽哪些網(wǎng)站焊工培訓(xùn)內(nèi)容有哪些
  • 網(wǎng)站建設(shè)常用代碼營(yíng)銷策劃36計(jì)
  • 直播視頻網(wǎng)站如何做網(wǎng)站策劃
  • 佛山專業(yè)做企業(yè)網(wǎng)站上海今天最新發(fā)布會(huì)
  • 吉 360 網(wǎng)站建設(shè)如何做好精準(zhǔn)營(yíng)銷
  • 網(wǎng)站客服工作內(nèi)容重慶網(wǎng)站建設(shè)哪家好
  • 凡客專賣店網(wǎng)站優(yōu)化入門
  • 安徽國(guó)貿(mào)集團(tuán)網(wǎng)站建設(shè)沈陽網(wǎng)站推廣優(yōu)化
  • 合肥專業(yè)做網(wǎng)站的互聯(lián)網(wǎng)域名注冊(cè)查詢
  • 做網(wǎng)站拍攝照片用什么佳能相機(jī)好網(wǎng)站優(yōu)化課程培訓(xùn)
  • 哪個(gè)網(wǎng)站可以做社工試題網(wǎng)絡(luò)服務(wù)器
  • 湖北住房和城鄉(xiāng)建設(shè)委員會(huì)網(wǎng)站東莞市民最新疫情
  • 三門峽集團(tuán)網(wǎng)站建設(shè)愛站網(wǎng)關(guān)鍵詞查詢工具
  • 有沒有人與動(dòng)物做的電影網(wǎng)站自己做網(wǎng)站怎么做
  • 自適應(yīng)全屏網(wǎng)站競(jìng)價(jià)排名名詞解釋
  • 網(wǎng)站建設(shè)網(wǎng)站排名優(yōu)化金牌服務(wù)搜索引擎排名影響因素有哪些
  • 房屋網(wǎng)簽查詢系統(tǒng)官方網(wǎng)站知乎推廣