<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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緩存:業(yè)務場景 在不少業(yè)務場景下,我們需要實現簡單的請求緩存(即某個請求只發(fā)起一次請求),例如上傳 Token 的獲取、獲取配置的接口等。 這些接口可以通過 Promise 實現簡單的緩存并能夠控制更新,而不需要另外引入緩存層。 示范代碼 用七牛上傳作例子,一般我們
        推薦度:
        導讀js使用Promise實現簡單的Ajax緩存:業(yè)務場景 在不少業(yè)務場景下,我們需要實現簡單的請求緩存(即某個請求只發(fā)起一次請求),例如上傳 Token 的獲取、獲取配置的接口等。 這些接口可以通過 Promise 實現簡單的緩存并能夠控制更新,而不需要另外引入緩存層。 示范代碼 用七牛上傳作例子,一般我們

        業(yè)務場景

        在不少業(yè)務場景下,我們需要實現簡單的請求緩存(即某個請求只發(fā)起一次請求),例如上傳 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 接口。

        繼續(xù)完善 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 一定是最新的。

        當然,這里還有很多需要優(yōu)化,例如失敗后的重試、判斷是 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緩存:業(yè)務場景 在不少業(yè)務場景下,我們需要實現簡單的請求緩存(即某個請求只發(fā)起一次請求),例如上傳 Token 的獲取、獲取配置的接口等。 這些接口可以通過 Promise 實現簡單的緩存并能夠控制更新,而不需要另外引入緩存層。 示范代碼 用七牛上傳作例子,一般我們
        推薦度:
        標簽: 使用 緩存 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久亚洲精品中文字幕无码| 高清在线亚洲精品国产二区| 亚洲av日韩av激情亚洲| 国产精品小视频免费无限app | 久久亚洲国产欧洲精品一| 一级白嫩美女毛片免费| 亚洲成a人片在线观看久| 免费人成动漫在线播放r18 | 亚洲男人的天堂在线va拉文| 男人免费视频一区二区在线观看| 免费h黄肉动漫在线观看| 特黄aa级毛片免费视频播放| 免费在线观看的黄色网址| 一级成人a做片免费| 亚洲中文字幕无码久久精品1| 中国黄色免费网站| 久久99国产亚洲精品观看| 免费在线看污视频| 亚洲一级在线观看| 午夜dj免费在线观看| 日韩久久无码免费毛片软件 | 国产大片线上免费观看| 亚洲人成综合网站7777香蕉| 日本免费人成视频播放| 一级一级毛片免费播放| 色婷婷六月亚洲婷婷丁香| 99国产精品永久免费视频| 欧美日韩亚洲精品| 亚洲香蕉成人AV网站在线观看| 一区二区三区福利视频免费观看| 亚洲一区免费视频| 亚洲国产成人精品无码久久久久久综合| 成人毛片100免费观看| 337p日本欧洲亚洲大胆艺术| 全免费A级毛片免费看网站| 中文字幕永久免费| 亚洲国产成+人+综合| 亚洲国产成人a精品不卡在线| 男人都懂www深夜免费网站| 亚洲国产区男人本色| 亚洲中文字幕无码一区二区三区|