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

axios中如何進(jìn)行同步請求(async+await)

 更新時(shí)間:2022年09月08日 10:26:09   作者:艾歡歡  
這篇文章主要介紹了axios中如何進(jìn)行同步請求(async+await),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

axios進(jìn)行同步請求(async+await)

介紹

Axios 是一個(gè)基于 promise 的 HTTP 庫,它支持 Promise API。

像這樣:

axios.post('getsomething').then(
?? ?res => {
?? ??? ?// 進(jìn)行一些操作
?? ?}
)

而 async/await 是一種建立在Promise之上的編寫異步或非阻塞代碼的新方法。async 是異步的意思,而 await 是 async wait的簡寫,即異步等待。

所以從語義上就很好理解 async 用于聲明一個(gè) 函數(shù) 是異步的,而await 用于等待一個(gè)異步方法執(zhí)行完成。

那么想要同步使用數(shù)據(jù)的話,就可以使用 async+await 。

代碼示例

模擬一次異步請求

// 假設(shè)這是我們要請求的數(shù)據(jù)
function getSomething(n) {
    return new Promise(resolve => {
        // 模擬1s后返回?cái)?shù)據(jù)
        setTimeout(() => resolve(222), 1000);
    });
}
function requestSomething() {
    console.log(111);
    getSomething().then(res => console.log(res));
    console.log(333);
}
requestSomething() //這個(gè)時(shí)候會(huì)輸出 111,333,222
// 如果想要等數(shù)據(jù)返回后再執(zhí)行后面的代碼,那么就要使用 async/await
async function requestSomething() {
    console.log(111);
    // 這時(shí)something會(huì)等到異步請求的結(jié)果回來后才進(jìn)行賦值,同時(shí)不會(huì)執(zhí)行之后的代碼
    const something = await getSomething();
	console.log(something)
    console.log(333);
}
requestSomething() //這個(gè)時(shí)候會(huì)輸出 111,222,333

axios使用async/await對promise進(jìn)行優(yōu)化

利用promise解決了發(fā)送ajax的回調(diào)地獄問題,是代碼看起來簡潔了許多

但是如果要按順序發(fā)送多次請求,還是有些麻煩的,因?yàn)槲覀冃枰恢比?then來得到結(jié)果,所以在ES7中有了一種新的語法:async/await,可以更加方便的進(jìn)行異步操作,先看一下上面的請求如果在axios中用這個(gè)語法來寫是什么效果:

 axios.defaults.baseURL = 'http://localhost:3000';
        async function queryData() {
            var ret = await axios.get('/data');
            var ret1 = await axios.get('/data1');
            var ret2 = await axios.get('/data2');
            return [ret, ret1, ret2];
        }
        console.log(queryData());

第一行代碼是給axios設(shè)置了一個(gè)公共請求路徑localhost:3000;

代碼看起來更加簡潔,就像是同步執(zhí)行一樣,省略了.then取到結(jié)果的過程,

結(jié)果:

可以看到,得到的還是promise對象,同時(shí)按順序拿到了三個(gè)請求任務(wù)的結(jié)果;

解釋

1、axios基本用法

	axios.get('http://localhost:3000/adata')
    .then(function(ret){
      // 注意data屬性是固定的用法,用于獲取后臺的實(shí)際數(shù)據(jù)
      // console.log(ret.data)
      console.log(ret)
    })

axios中數(shù)據(jù)存放在ret.data中,想要得到結(jié)果同樣需要.then一下

2、async基本用法

async/await 處理異步操作:

  • async函數(shù)返回一個(gè)Promise實(shí)例對象
  • await后面可以直接跟一個(gè) Promise實(shí)例對象

await + promise實(shí)例對象=要得到的結(jié)果

  		// async總結(jié) 
        //1, 有async標(biāo)識的函數(shù)稱之為 異步函數(shù),
        //2, 有async關(guān)鍵字出現(xiàn),await可以不出現(xiàn)
        //3, 有await出現(xiàn),async必須出現(xiàn)
        axios.defaults.baseURL = 'http://localhost:3000';
        async function queryDate() {
            // await的作用就是將異步函數(shù)變成同步操作
            var ret = await axios.get('/adata')
            console.log(ret.data);
        }
        queryDate();

結(jié)果:

也就是說,通過await可以直接取到promit實(shí)例對象的結(jié)果,而不用再.then來獲取,這樣一來,就相當(dāng)于將異步的請求變成了同步任務(wù);

這樣的話我們回到最初的問題,按照一定的順序來發(fā)送網(wǎng)絡(luò)請求,下次請求需要用到上次請求所獲取的數(shù)據(jù). 現(xiàn)在如何實(shí)現(xiàn)呢?

接口是這樣的:

想要的到 world,則必須攜帶async1請求得到的數(shù)據(jù)hello

 axios.defaults.baseURL = 'http://localhost:3000/';
    async function queryData() {
      var info = await axios.get('async1');
      console.log(info.data);
      var ret = await axios.get('async2?info=' + info.data);
      return ret.data;
    }
    queryData().then(function (data) {
      console.log(data)
    })

打印結(jié)果:

代碼看著就很舒服

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • el-select 下拉框多選實(shí)現(xiàn)全選的實(shí)現(xiàn)

    el-select 下拉框多選實(shí)現(xiàn)全選的實(shí)現(xiàn)

    這篇文章主要介紹了el-select 下拉框多選實(shí)現(xiàn)全選的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue3+TypeScript報(bào)錯(cuò):無法找到模塊xx的聲明文件問題

    Vue3+TypeScript報(bào)錯(cuò):無法找到模塊xx的聲明文件問題

    這篇文章主要介紹了Vue3+TypeScript報(bào)錯(cuò):無法找到模塊xx的聲明文件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 在vue和element-ui的table中實(shí)現(xiàn)分頁復(fù)選功能

    在vue和element-ui的table中實(shí)現(xiàn)分頁復(fù)選功能

    這篇文章主要介紹了在vue和element-ui的table中實(shí)現(xiàn)分頁復(fù)選功能,本文代碼結(jié)合圖文的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Vue Prop屬性功能與用法實(shí)例詳解

    Vue Prop屬性功能與用法實(shí)例詳解

    這篇文章主要介紹了Vue Prop屬性功能與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了vue.js中Prop屬性的功能、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • vue項(xiàng)目出現(xiàn)ERESOLVE could not resolve問題及解決

    vue項(xiàng)目出現(xiàn)ERESOLVE could not resolve問題及解決

    這篇文章主要介紹了vue項(xiàng)目出現(xiàn)ERESOLVE could not resolve問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 優(yōu)雅的處理vue項(xiàng)目異常實(shí)戰(zhàn)記錄

    優(yōu)雅的處理vue項(xiàng)目異常實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅的處理vue項(xiàng)目異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Vue封裝的標(biāo)準(zhǔn)漏斗圖教程

    Vue封裝的標(biāo)準(zhǔn)漏斗圖教程

    文章展示了基于Vue封裝的標(biāo)準(zhǔn)漏斗圖的代碼,包括權(quán)重算法、滾輪監(jiān)聽和點(diǎn)擊示例功能,旨在提供實(shí)用的圖表展示技巧
    2025-02-02
  • 解決vue addRoutes不生效問題

    解決vue addRoutes不生效問題

    這篇文章主要介紹了解決vue addRoutes不生效問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue3中template使用ref無需.value原因解析

    vue3中template使用ref無需.value原因解析

    vue3的template中使用ref變量無需使用.value,還可以在事件處理器中進(jìn)行賦值操作時(shí),無需使用.value就可以直接修改ref變量的值,這篇文章主要介紹了原來vue3中template使用ref無需.value是因?yàn)檫@個(gè),需要的朋友可以參考下
    2024-06-06
  • 在vue-cli項(xiàng)目中如何使用swiper

    在vue-cli項(xiàng)目中如何使用swiper

    這篇文章主要介紹了在vue-cli項(xiàng)目中如何使用swiper問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論

交口县| 保山市| 化德县| 二连浩特市| 桐乡市| 连州市| 永年县| 岑巩县| 应用必备| 大庆市| 宜兰市| 江安县| 郧西县| 兴山县| 南阳市| 定兴县| 钦州市| 永新县| 中西区| 顺昌县| 宁南县| 隆林| 承德县| 宜城市| 静乐县| 通辽市| 闸北区| 建阳市| 南澳县| 清镇市| 小金县| 鸡泽县| 乳山市| 镇原县| 宜丰县| 屏南县| 内丘县| 麦盖提县| 桃园县| 南澳县| 桓台县|