国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

js使用Promise實現簡單的Ajax緩存

來源:懂視網 責編:小采 時間:2020-11-27 22:03:48
文檔

js使用Promise實現簡單的Ajax緩存

js使用Promise實現簡單的Ajax緩存:業務場景 在不少業務場景下,我們需要實現簡單的請求緩存(即某個請求只發起一次請求),例如上傳 Token 的獲取、獲取配置的接口等。 這些接口可以通過 Promise 實現簡單的緩存并能夠控制更新,而不需要另外引入緩存層。 示范代碼 用七牛上傳作例子,一般我們
推薦度:
導讀js使用Promise實現簡單的Ajax緩存:業務場景 在不少業務場景下,我們需要實現簡單的請求緩存(即某個請求只發起一次請求),例如上傳 Token 的獲取、獲取配置的接口等。 這些接口可以通過 Promise 實現簡單的緩存并能夠控制更新,而不需要另外引入緩存層。 示范代碼 用七牛上傳作例子,一般我們

業務場景

在不少業務場景下,我們需要實現簡單的請求緩存(即某個請求只發起一次請求),例如上傳 Token 的獲取、獲取配置的接口等。

這些接口可以通過 Promise 實現簡單的緩存并能夠控制更新,而不需要另外引入緩存層。

示范代碼

用七牛上傳作例子,一般我們會把七牛上傳封裝為一個單獨的 Upload 組件,外部只需要調用組件,而 token 的獲取封裝到組件內部實現。

//Upload.vue
let fetchToken = null;
export default {
 data() {
 return {
 token: ''
 };
 },
 methods: {
 async upload() {
 try {
 // ...
 }
 catch(err) {
 alert(err.message);
 this.refreshToken();
 }
 },
 refreshToken() {
 fetchToken = null;
 this.fetchToken();
 },
 fetchToken() {
 if (!fetchToken) {
 fetchToken = request.get('/api/qiniu/token');
 }
 try {
 this.token = await fetchToken;
 }
 catch(err) {
 console.error(err);
 }
 }
 },
 created() {
 this.fetchToken();
 }
};

上面是一個簡單的緩存上傳 token 的例子,并且會在上傳失敗時刷新 token。

與直接緩存 Token 的值比較,緩存請求有什么好處?

// 緩存值的代碼
export default {
 methods: {
 fetchToken() {
 if (!fetchToken) {
 fetchToken = await request.get('/api/qiniu/token');
 }
 try {
 this.token = fetchToken;
 }
 catch(err) {
 console.error(err);
 }
 }
 }
}

一個比較常見的 Upload 組件 的應用場景,在一個頁面里同時使用多次該組件。

<template>
 <div class="upload1"><upload /></div>
 <div class="upload2"><upload /></div>
</template>

就上面的代碼例子,如果使用緩存值的方法,那么頁面一打開就會請求兩次獲取 Token 接口。

繼續完善 Upload 組件

//Upload.vue
let fetchToken = null;
export default {
 methods: {
 async upload() {
 try {
 this.fetchToken();
 const token = await fetchToken;
 // ...
 } catch (err) {
 alert(err.message);
 this.refreshToken();
 }
 },
 refreshToken() {
 fetchToken = null;
 this.fetchToken();
 },
 fetchToken() {
 if (!fetchToken) {
 fetchToken = request.get('/api/qiniu/token');
 }
 }
 },
 created() {
 this.fetchToken();
 }
};

為了防止多個 Upload 組件 token 不同步問題,不再通過this.token保存 token,而是每次都等待 fetchToken resolved,保證獲取到的 token 一定是最新的。

當然,這里還有很多需要優化,例如失敗后的重試、判斷是 401 失敗才刷新 token、設置錯誤時間、定時刷新等等,但總體思路就是上面代碼所展示的內容。

另外再介紹一個經典應用場景

const fetchConfig = (() => {
 let configRequest = null;
 return () => {
 if (!configRequest) {
 configRequest = Promise.all([services.customer.config1, services.customer.config2])
 .then(([data1, data2]) => {
 return { data1, data2 };
 })
 .catch(err => {
 configRequest = null;
 return Promise.reject(err);
 });
 }
 return configRequest;
 };
})();

export default {
 async beforeRouteEnter(to, from, next) {
 try {
 // 配置信息僅需要成功請求一次
 const [data, config] = await Promise.all([services.customer.getInfo(), fetchConfig()]);
 next(vm => {
 vm.data = data;
 vm.config = config;
 vm.init();
 };
 } catch (err) {
 next(err);
 }
 }
};

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

js使用Promise實現簡單的Ajax緩存

js使用Promise實現簡單的Ajax緩存:業務場景 在不少業務場景下,我們需要實現簡單的請求緩存(即某個請求只發起一次請求),例如上傳 Token 的獲取、獲取配置的接口等。 這些接口可以通過 Promise 實現簡單的緩存并能夠控制更新,而不需要另外引入緩存層。 示范代碼 用七牛上傳作例子,一般我們
推薦度:
標簽: 使用 緩存 js
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产一区二区三区免费 | 日韩精品a在线视频 | 全免费a级毛片免费毛视频 热re91久久精品国产91热 | 国产精品福利久久久久久小说 | 一级毛片特黄久久免费看 | 亚洲va乱码一区二区三区 | 欧美另类在线观看 | 亚洲欧洲日韩综合 | 欧美成人禁片在线观看网址 | 欧美综合自拍亚洲综合百度 | 日韩中文字幕a | 国产成人亚洲欧美三区综合 | 久久久噜噜噜www成人网 | 国产精品视频专区 | 亚洲一区二区综合 | 亚洲欧洲久久 | 久久精品亚洲欧美日韩久久 | 国产日韩欧美一区二区三区视频 | 在线一区二区三区 | 亚洲欧美日韩综合在线播放 | 最刺激黄a大片免费观看 | 国产精品一页 | 久久精品2| 国语对白一区二区三区 | 亚洲一区二区三区夜色 | 一道本一区二区三区 | 97伊人久久 | 欧美一区二区视频在线观看 | 免费观看国产精品 | 又黄又爽视频在线观看 | 国产欧美在线观看一区二区 | 亚洲欧美精品伊人久久 | 香蕉久久一区二区不卡无毒影院 | 国产精美视频 | 国产精品久久久 | 国产一区二区在线免费观看 | 看全色黄大色大片免费久久 | 美女视频黄a视频全免费网站色 | 欧美高清不卡 | 欧美伊人久久大香线蕉综合69 | 一区二区三区视频 |