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

Vue Axios異步與數(shù)據(jù)類型轉(zhuǎn)換問(wèn)題淺析

 更新時(shí)間:2023年01月28日 08:40:06   作者:知奕奕  
總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路,Axios是一個(gè)開(kāi)源的可以用在瀏覽器端和Node JS的異步通信框架,主要作用就是實(shí)現(xiàn)AJAX異步通信

axios 請(qǐng)求中異步與否問(wèn)題

眾所周知,axios 請(qǐng)求有些請(qǐng)求需要配合異步函數(shù)來(lái)實(shí)現(xiàn),我大概總結(jié)了兩種適配場(chǎng)景:

不使用異步:后端響應(yīng)值對(duì)后續(xù)操作無(wú)影響,我們僅需要判斷這個(gè)請(qǐng)求是否成功的情況下

使用異步:我們需要存儲(chǔ)后端響應(yīng)值并使用它進(jìn)行某些渲染操作

不使用異步的例子

參考我們上一節(jié)的最后一塊,我們抽離了登錄校驗(yàn)的 axios 請(qǐng)求,這是具體代碼

可見(jiàn),我們只需要把本地 token 傳遞給后端,經(jīng)過(guò)后端 jwt 驗(yàn)證并返回一個(gè)成功狀態(tài)碼 200,既然成功了,自然就會(huì)執(zhí)行 then 內(nèi)的方法,此時(shí)我們無(wú)需對(duì)響應(yīng)體做出任何判斷都可以明確的知道此次登錄驗(yàn)證是成功的,所以直接返回一個(gè)布爾值 true 即可

這里就不需要使用到異步函數(shù)

validateLogin: (url, uname, pwd) => {
    // 使用post請(qǐng)求,請(qǐng)求體data即傳入兩個(gè)必要值
    http
      .post(url, {
        username: uname,
        password: pwd,
      })
      // 在then中處理請(qǐng)求成功的方法
      .then((res) => {
        console.log(res);
        let token = res.data.msg;
        localStorage.setItem("token", token);
        fastMessage.success("成功登錄!");
      })
      // 在catch中處理請(qǐng)求失敗的方法
      .catch((err) => {
        fastMessage.error("用戶名或密碼錯(cuò)誤!");
        return false;
      });
    // 返回值有無(wú)取決于你的項(xiàng)目需求
    return true;
  },

使用異步的例子

一般的,在我們使用 axios 請(qǐng)求后端服務(wù)器時(shí)必定會(huì)有一小段往返時(shí)間,假設(shè)我們不使用異步函數(shù),那么就會(huì)造成還沒(méi)有取回響應(yīng)體就直接返回了,那么必然會(huì)得到一個(gè)空值!

使用 try...catch... 代碼塊處理響應(yīng)成功與否,因?yàn)?catch 能捕獲到任意層次深度的任意錯(cuò)誤,故 axios 請(qǐng)求一旦失敗則必被捕獲!

異步執(zhí)行請(qǐng)求保證了我們獲取的響應(yīng)體值為后端數(shù)據(jù),最后的 return 也能正確的返回帶值變量

import http from "./http.js";
let userDatas;
// 異步函數(shù),發(fā)送后端查詢數(shù)據(jù)庫(kù)得到所有用戶信息
async function userDataQuery(url) {
  try {
    // 異步請(qǐng)求后端并拿到結(jié)構(gòu)Promise
    let res = await http.get(url);
    // 將獲取到的響應(yīng)體中的值賦予給全局變量
    userDatas = res.data.data;
    console.log(userDatas);
  } catch (err) {
    console.log("這TMD是錯(cuò)的");
  }
  // 返回全局變量
  return userDatas;
}
export default {
  userDataQuery,
};

同志醒醒,這還沒(méi)完,因?yàn)槲覀兪褂?async 構(gòu)造異步函數(shù),無(wú)論該函數(shù)返回啥,結(jié)果都是一個(gè) promise 對(duì)象,我們只需要最后一步,對(duì)其進(jìn)行數(shù)據(jù)提取并存儲(chǔ)就完事了?。?!

請(qǐng)看模塊的 script 部分代碼:

這里使用了 pinia 進(jìn)行數(shù)據(jù)存儲(chǔ),setUsersList 是 actions 中的一個(gè)方法,它是用來(lái)設(shè)置 state 中的其中一個(gè)變量的值的,這一步操作下來(lái)即可把我們要的數(shù)據(jù)存儲(chǔ)到 store 里面了!

因?yàn)樽兞?datas 已被 reactive 響應(yīng)式,故 store 的更新也會(huì)帶動(dòng)該變量的更新,同時(shí)帶動(dòng)對(duì)應(yīng)渲染的更新

import { onMounted, reactive, ref } from "vue";
import apiQuery from "../../api/api-query.js";
import dbStore from "../../store/db-store.js";
const store = dbStore();
let datas = reactive(store.$state.userLists);
// 執(zhí)行最后一步的promise處理
apiQuery.userDataQuery("/sdb/allusers").then((res) => {
  // 調(diào)用store中的方法直接把數(shù)據(jù)存儲(chǔ)到status域中的變量
  store.setUsersList(res);
  // 隨意輸出一些內(nèi)容作為驗(yàn)證
  console.log(res);
});

對(duì)象與數(shù)組轉(zhuǎn)換

執(zhí)行異步 axios 請(qǐng)求時(shí),對(duì)于 POST 類型的數(shù)據(jù)存儲(chǔ)往往會(huì)遇到 formdata 是一個(gè)對(duì)象,而我們 vue 渲染時(shí)需要的偏偏就得是數(shù)組類型的

這一步可以在 store 中的 actions 配置的方法里面進(jìn)行處理

此處簡(jiǎn)單的使用了 foreach 把對(duì)象內(nèi)容一一壓入數(shù)組的方式實(shí)現(xiàn),請(qǐng)注意每次執(zhí)行該方法是變量值的配置?。?!

import { defineStore } from "pinia";
import Names from "./names.js";
const dbStore = defineStore(Names.DBSTORE, {
  // 隨意配置一個(gè)數(shù)組變量userLists
  state: () => {
    return {
      userLists: [],
    };
  },
  actions: {
    // 設(shè)置變量的值,形參data即傳來(lái)的對(duì)象object
    setUsersList(data) {
      // 轉(zhuǎn)換前務(wù)必清空變量值,否則會(huì)造成值重復(fù)添加現(xiàn)象
      this.userLists = [];
      // foreach將對(duì)象中的值一個(gè)個(gè)取出來(lái)添加到數(shù)組里面
      for (let i in data) {
        console.log(data[i]);
        this.userLists.push(data[i]);
      }
    },
  },
  getters: {},
});
export default dbStore;

到此這篇關(guān)于Vue Axios異步與數(shù)據(jù)類型轉(zhuǎn)換問(wèn)題淺析的文章就介紹到這了,更多相關(guān)Vue Axios異步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue項(xiàng)目中全局引入1個(gè).scss文件的問(wèn)題解決

    vue項(xiàng)目中全局引入1個(gè).scss文件的問(wèn)題解決

    這篇文章主要跟大家介紹了vue項(xiàng)目中全局引入1個(gè).scss文件的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue3+vite+vant4手機(jī)端項(xiàng)目實(shí)戰(zhàn)記錄

    vue3+vite+vant4手機(jī)端項(xiàng)目實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于vue3+vite+vant4手機(jī)端項(xiàng)目實(shí)戰(zhàn)的相關(guān)資料,Vue3是一種前端開(kāi)發(fā)框架,它的目標(biāo)是提供更好的性能和開(kāi)發(fā)體驗(yàn),需要的朋友可以參考下
    2023-08-08
  • 基于vue-cli搭建多模塊且各模塊獨(dú)立打包的項(xiàng)目

    基于vue-cli搭建多模塊且各模塊獨(dú)立打包的項(xiàng)目

    這篇文章主要介紹了基于vue-cli搭建多模塊且各模塊獨(dú)立打包的項(xiàng)目,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • 如何區(qū)分vue中的v-show 與 v-if

    如何區(qū)分vue中的v-show 與 v-if

    這篇文章主要介紹了如何區(qū)分vue中的v-show 與 v-if ,幫助大家更好的理解和學(xué)習(xí)vue框架,感興趣的朋友可以了解下
    2020-09-09
  • vue基于better-scroll實(shí)現(xiàn)左右聯(lián)動(dòng)滑動(dòng)頁(yè)面

    vue基于better-scroll實(shí)現(xiàn)左右聯(lián)動(dòng)滑動(dòng)頁(yè)面

    這篇文章主要介紹了vue基于better-scroll實(shí)現(xiàn)左右聯(lián)動(dòng)滑動(dòng)頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Vue中key的原理以及diff算法詳解

    Vue中key的原理以及diff算法詳解

    這篇文章主要介紹了Vue中key的原理以及diff算法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Vue監(jiān)聽(tīng)一個(gè)數(shù)組id是否與另一個(gè)數(shù)組id相同的方法

    Vue監(jiān)聽(tīng)一個(gè)數(shù)組id是否與另一個(gè)數(shù)組id相同的方法

    今天小編就為大家分享一篇Vue監(jiān)聽(tīng)一個(gè)數(shù)組id是否與另一個(gè)數(shù)組id相同的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 如何使用JS監(jiān)聽(tīng)一個(gè)變量改變

    如何使用JS監(jiān)聽(tīng)一個(gè)變量改變

    在JS編程中如果能監(jiān)測(cè)變量的內(nèi)容,當(dāng)變量值發(fā)生變化時(shí),實(shí)時(shí)發(fā)出通知,這定是一項(xiàng)很有用的功能,下面這篇文章主要給大家介紹了關(guān)于如何使用JS監(jiān)聽(tīng)一個(gè)變量改變的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 如何基于Vue制作一個(gè)猜拳小游戲

    如何基于Vue制作一個(gè)猜拳小游戲

    Vue.js作為目前最熱門(mén)最具前景的前端框架之一,其提供了一種幫助我們快速構(gòu)建并開(kāi)發(fā)前端項(xiàng)目的新的思維模式,下面這篇文章主要給大家介紹了關(guān)于如何基于Vue制作一個(gè)猜拳小游戲的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • vue 文件目錄結(jié)構(gòu)詳解

    vue 文件目錄結(jié)構(gòu)詳解

    本篇文章主要介紹了vue 文件目錄結(jié)構(gòu)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11

最新評(píng)論

久治县| 杂多县| 芮城县| 厦门市| 永平县| 轮台县| 拉萨市| 东海县| 正安县| 伊川县| 益阳市| 江达县| 宜州市| 宁明县| 化州市| 广南县| 孝感市| 安顺市| 涡阳县| 偏关县| 水富县| 华蓥市| 黄平县| 株洲县| 资阳市| 阜城县| 绥化市| 富蕴县| 洛南县| 白城市| 辉县市| 靖江市| 沙雅县| 柘城县| 襄汾县| 肥城市| 博客| 郴州市| 永善县| 华宁县| 同仁县|