最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue公共loading升級版解決思路(處理并發(fā)異步差時響應(yīng))

 更新時間:2023年11月21日 08:59:59   作者:波特卡斯D  
這篇文章主要介紹了Vue公共loading升級版(處理并發(fā)異步差時響應(yīng)),解決思路是通過定義一個全局對象來存儲每個接口的響應(yīng)狀態(tài),直到每個請求接口都收到響應(yīng)才變更狀態(tài),結(jié)束loading動畫,需要的朋友可以參考下

公共loading是項目系統(tǒng)中很常見的場景,處理方式也不外乎三個步驟:
1.通過全局狀態(tài)管理定義狀態(tài)值(vuex、pinia等)。
2.在程序主入口監(jiān)聽狀態(tài)值變化,從而展示/隱藏laoding動畫。
3.在請求和相應(yīng)攔截器中變更狀態(tài)值。

第一二步驟處理大同小異,但在第三步中,網(wǎng)上很多博文分享的方法是:在請求攔截中展示loading,在響應(yīng)攔截器中判斷收到成功響應(yīng)時直接隱藏loading,這種方法看似可行但實際過程中卻有問題。例如,假設(shè)在第0秒時同時向后臺發(fā)送了兩個異步請求A和B,由于網(wǎng)絡(luò)或處理邏輯不同,A請求0.5秒秒收到成功響應(yīng),B請求2秒才收到。那在第0.5秒,響應(yīng)攔截器就會把loading狀態(tài)變更,結(jié)束loading動畫,但此時B請求還沒收到返回。如果用戶接下來的操作同時需要A和B請求的數(shù)據(jù),提前結(jié)束動畫會讓用戶體檢變差。

解決思路:
定義一個全局對象來存儲每個接口的響應(yīng)狀態(tài),直到每個請求接口都收到響應(yīng)才變更狀態(tài),結(jié)束loading動畫。因為鍵名的唯一性,可以使用接口路徑(或唯一接口編號)作為鍵名。請求時添加一個鍵值對,響應(yīng)時變更鍵值,同時遍歷對象狀態(tài)值進(jìn)行判斷

let apiStatusList ={
  '/api/a':true,//true請求中
  '/api/b':false //false請求完成
}

具體操作如下(以vue3的pinia為例):
定義一個loading.js

import { defineStore } from 'pinia';
export const useLoadStore = defineStore('storeLoading', {
  state: () => {
    return {
      apiStatusList:{},
      loading:false, //網(wǎng)絡(luò)加載狀態(tài),true加載中
    };
  },
  actions: {
    updateLoadingState(value){
      this.loading = value
    },
    setApiStatusList(value){
      this.apiList = value;
    }
  }
});

攔截器處理:

import axios from 'axios';
import { useLoadStore } from '../stores/loading';
const request = axios.create();
//請求攔截
request.interceptors.request.use(
  (config) => {
    //公共loading
    const loadStore = useLoadStore();
    let statusList = { ...loadStore.apiStatusList };
    statusList[config.url] = true; //接口賦值為請求中
    loadStore.setApiStatusList(statusList);
    if (!loadStore.loading) {  //判斷l(xiāng)oading是否正在展示中
      loadStore.updateLoadingState(true);
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
)
//響應(yīng)攔截
request.interceptors.response.use(
  (response) => {
    const loadStore = useLoadStore();
    let statusList = { ...loadStore.apiStatusList };
    statusList[response.config.url] = false;  ////接口賦值為請求完成
    if (!Object.values(statusList).includes(true)) { //遍歷對象,判斷接口是否全部返回
      if (loadStore.loading) {
        loadStore.updateLoadingState(false);
        loadStore.setApiStatusList({});
      }
    } else {
      loadStore.setApiStatusList(statusList);
    }
  },
  (error) => {//有接口報錯,重置loading
    const loadStore = useLoadStore();
    if (loadStore.loading) {
      loadStore.updateLoadingState(false);
      loadStore.setApiStatusList({});
    }
  }
)

App.vue監(jiān)聽狀態(tài)變化

//監(jiān)聽store狀態(tài)值時需要傳入function
watch(()=>loadStore.loading,(newValue, oldValue)=>{
  if(newValue){
    showLoadingToast({
      duration: 0,
      forbidClick: true,
    });
  }else{
    closeToast();
  }
})

到此這篇關(guān)于Vue公共loading升級版(處理并發(fā)異步差時響應(yīng))的文章就介紹到這了,更多相關(guān)Vue公共loading升級版內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue使用計算屬性完成動態(tài)滑竿條制作

    vue使用計算屬性完成動態(tài)滑竿條制作

    這篇文章主要介紹了vue使用計算屬性完成動態(tài)滑竿條制作,文章圍繞計vue算屬制作動態(tài)滑竿條的相關(guān)代碼完成內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • vue-photo-preview圖片預(yù)覽失效的問題及解決

    vue-photo-preview圖片預(yù)覽失效的問題及解決

    這篇文章主要介紹了vue-photo-preview圖片預(yù)覽失效的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue不用import直接調(diào)用實現(xiàn)接口api文件封裝

    vue不用import直接調(diào)用實現(xiàn)接口api文件封裝

    這篇文章主要為大家介紹了vue不用import直接調(diào)用實現(xiàn)接口api文件封裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 在vue 中使用 less的教程詳解

    在vue 中使用 less的教程詳解

    這篇文章主要介紹了在vue 中使用 less 的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • vue中watch監(jiān)聽器用法之deep、immediate、flush

    vue中watch監(jiān)聽器用法之deep、immediate、flush

    Vue是可以監(jiān)聽到多層級數(shù)據(jù)改變的,且可以在頁面上做出對應(yīng)展示,下面這篇文章主要給大家介紹了關(guān)于vue中watch監(jiān)聽器用法之deep、immediate、flush的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Vue攔截器原理以及詳細(xì)使用方法

    Vue攔截器原理以及詳細(xì)使用方法

    這篇文章主要給大家介紹了關(guān)于Vue攔截器原理以及詳細(xì)使用的相關(guān)資料,Vue攔截器通常用于在發(fā)送請求或響應(yīng)數(shù)據(jù)時對其進(jìn)行一些處理或修改,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 全面剖析Vue3 全新特性 defineModel

    全面剖析Vue3 全新特性 defineModel

    defineModel是Vue3.4引入的一個編譯器宏,用于簡化組件雙向數(shù)據(jù)綁定的實現(xiàn),它是對v-model指令在組件上使用的語法糖,本文給大家介紹Vue3全新特性defineModel的相關(guān)知識,感興趣的朋友一起看看吧
    2025-08-08
  • 前端文件導(dǎo)出設(shè)置responseType為blob時遇到的問題及解決

    前端文件導(dǎo)出設(shè)置responseType為blob時遇到的問題及解決

    這篇文章主要給大家介紹了關(guān)于前端文件導(dǎo)出設(shè)置responseType為blob時遇到的問題及解決方法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 在vue項目中(本地)使用iconfont字體圖標(biāo)的三種方式總結(jié)

    在vue項目中(本地)使用iconfont字體圖標(biāo)的三種方式總結(jié)

    這篇文章主要介紹了在vue項目中(本地)使用iconfont字體圖標(biāo)的三種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 如何處理?Vue3?中隱藏元素刷新閃爍問題

    如何處理?Vue3?中隱藏元素刷新閃爍問題

    本文主要探討了網(wǎng)頁刷新時,原本隱藏的元素會一閃而過的問題,以及嘗試過的解決方案并未奏效,通過實例代碼介紹了如何處理?Vue3?中隱藏元素刷新閃爍問題,感興趣的朋友跟隨小編一起看看吧
    2024-10-10

最新評論

松原市| 当涂县| 浦城县| 昌邑市| 电白县| 伊宁县| 邯郸市| 西乡县| 景洪市| 隆化县| 大理市| 扶绥县| 北票市| 吉木乃县| 延庆县| 富宁县| 乐业县| 曲阜市| 南平市| 兴安盟| 乌鲁木齐市| 无棣县| 北安市| 饶平县| 行唐县| 仙游县| 启东市| 西华县| 白玉县| 泾源县| 屯门区| 顺平县| 大石桥市| 三门峡市| 砚山县| 临桂县| 高唐县| 南漳县| 晋江市| 阿尔山市| 夏津县|