亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

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

2024-09-01 08:33:59
字體:
來源:轉載
供稿:網友

業務場景

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

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

示范代碼

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

//Upload.vuelet 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.vuelet 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);  } }};

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品自拍小视频| 色哟哟入口国产精品| 欧美午夜久久久| 国产一区二区黄| 欧美日韩国产综合新一区| 97色在线观看| 亚洲丝袜一区在线| 亚洲精品免费一区二区三区| 日本久久久久久久久久久| 国模视频一区二区| 亚洲欧美一区二区三区久久| 日韩av片永久免费网站| 日韩在线观看免费高清| 日韩在线视频播放| 成年人精品视频| 欧美性猛交xxxx黑人| 日韩成人xxxx| 久久国产精品免费视频| 91社影院在线观看| 国产日韩av在线播放| 久久国产天堂福利天堂| 久久视频精品在线| 欧美日韩国产综合新一区| 91日本在线观看| 欧美在线性视频| 亚洲人成电影网站| 国产成人高清激情视频在线观看| 日韩经典中文字幕| 久久久精品亚洲| 精品精品国产国产自在线| 97在线精品国自产拍中文| 欧美日韩中文字幕在线| 成人久久18免费网站图片| 日韩在线视频免费观看| 亚洲第一偷拍网| 日韩小视频在线| 亚洲第一福利视频| 欧美激情在线视频二区| 日本一区二区不卡| 精品国产一区二区三区久久久| 国产69精品久久久久99| 91久久久久久久一区二区| 亚洲国产精品va在看黑人| 伊人亚洲福利一区二区三区| 一区二区三区国产视频| 国产成人一区二区在线| 国产精品久久久久久中文字| 日本一区二三区好的精华液| 日韩综合视频在线观看| 成人精品视频在线| 亚洲免费av片| 日韩精品久久久久久福利| 日韩av日韩在线观看| 欧美日韩国产成人在线观看| 91精品国产777在线观看| 日产精品久久久一区二区福利| 亚洲国产精品久久久| 大胆欧美人体视频| xvideos国产精品| 欧美中文在线字幕| 欧美精品videosex性欧美| 国产精品视频资源| 久久九九热免费视频| 色综合久久88| 性欧美亚洲xxxx乳在线观看| 91精品国产91久久久久久久久| 狠狠干狠狠久久| 亚洲人成电影在线| 伊人精品在线观看| 亚洲福利视频网| 成人在线一区二区| 精品国产乱码久久久久久天美| 成人在线播放av| 欧美xxxx14xxxxx性爽| 欧美激情视频一区二区| 国产精品色悠悠| 欧美激情影音先锋| 久久精品最新地址| 亚洲美女视频网| 亚洲男人天堂2023| 欧美情侣性视频| 自拍亚洲一区欧美另类| 色妞在线综合亚洲欧美| 国产精品久久久久高潮| 欧美精品videosex极品1| 欧美激情视频一区| 国产女人18毛片水18精品| 色婷婷亚洲mv天堂mv在影片| 国产精品自产拍高潮在线观看| 神马久久桃色视频| 91手机视频在线观看| 91老司机精品视频| 97视频在线播放| 深夜福利91大全| 欧美日韩福利电影| 在线观看日韩视频| 欧美激情女人20p| 欧美性猛交xxxx黑人| 欧美激情国产精品| 亚洲欧洲日产国码av系列天堂| 操人视频在线观看欧美| 亚洲国产成人91精品| 亚洲欧美国产另类| 欧美亚洲第一页| 一区二区三区在线播放欧美| 欧美老女人bb| 欧美国产日韩一区| 欧美激情videoshd| 国产成人综合av| 国产91露脸中文字幕在线| 久久久久久亚洲精品不卡| 深夜福利一区二区| 久久久久久久久久久久久久久久久久av| 91嫩草在线视频| 91精品视频网站| 国产亚洲精品成人av久久ww| 国精产品一区一区三区有限在线| 久久成年人视频| 中文字幕日韩有码| 久久久久亚洲精品国产| 久久久免费高清电视剧观看| 欧美日韩激情视频8区| 午夜精品久久久久久99热软件| 国产91精品久久久久久久| 久久精品青青大伊人av| 自拍视频国产精品| www高清在线视频日韩欧美| 亚洲成人精品视频| 91超碰中文字幕久久精品| 尤物精品国产第一福利三区| 欧美极品第一页| 日韩av电影手机在线观看| 久久人人爽人人爽人人片亚洲| 亚洲免费影视第一页| 国产91色在线| 欧美做受高潮1| 日韩在线高清视频| 免费91在线视频| 久久国产精品首页| 在线成人免费网站| 91免费高清视频| 欧洲成人在线观看| 亚洲一区二区黄| 色噜噜国产精品视频一区二区| 亚洲v日韩v综合v精品v| 欧洲成人性视频| 精品欧美激情精品一区| 亚洲三级 欧美三级| 久久天堂av综合合色| 中文在线资源观看视频网站免费不卡| 91亚洲精品久久久久久久久久久久| 国产不卡精品视男人的天堂| 国产精品1区2区在线观看| 国产精品天天狠天天看| 2019中文在线观看| 亚洲精品久久久久久下一站| 国产亚洲精品久久久久久| 91精品久久久久久| 久久久精品久久| 久久国产精品久久久| 精品日本美女福利在线观看| 日韩美女在线观看一区| 亚洲国产另类 国产精品国产免费| 欧美性猛交xxxx免费看久久久|