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

await?Streaking解決原理示例詳解

 更新時(shí)間:2022年12月14日 15:11:14   作者:桃小瑞  
這篇文章主要為大家介紹了await?Streaking解決原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

我們現(xiàn)在在請(qǐng)求接口的過程中,已經(jīng)習(xí)慣了async/await的寫法,已經(jīng)逐漸的代替了promise的寫法,但我們?cè)陂_發(fā)的過程中,都是混用的狀態(tài),當(dāng)你體驗(yàn)async/await過的好,就會(huì)愛不釋手。

async/await我們要拒絕 Streaking,啥叫 Streaking,我們看個(gè)代碼。

const foo = async () =>  {
    const response = await axios.get('https://www.baidu.com')
    console.log(response);
}
foo()

一旦失敗我們控制臺(tái)就會(huì)出現(xiàn)報(bào)錯(cuò),一個(gè)接口就是一個(gè)紅色的。

此時(shí),你想起我們還有try...catch...,可你知道嗎?try...catch...并不是萬能的,有時(shí)候他捕獲不到異步的錯(cuò)誤,再有就是每個(gè)async/await你都加一個(gè)try...catch...,一個(gè)項(xiàng)目中,并可能只出現(xiàn)一個(gè)借口調(diào)用的地方吧,每個(gè)都加,就請(qǐng)問你累不累??。

const foo = async () =>  {
    try{
        const response = await axios.get('https://www.baidu.com')
        console.log(response);
    } catch (error) {
        console.log(error)
    }
}
foo()

優(yōu)化async/await

經(jīng)過上面一說,那我還不如用回promise。當(dāng)你看到一長串的.then的時(shí)候你好維護(hù)嗎?不煩嗎?

那你說我們應(yīng)該怎么辦?我們需要從源頭入手。

我們現(xiàn)在都會(huì)先基于axios/fetch進(jìn)行二次封裝對(duì)不?有時(shí)候我們還會(huì)三次封裝對(duì)吧?這個(gè)封裝就是我們的源頭。

我們先看個(gè)promise的封裝。

    // 封裝
    const request = (option = {}) =>{
        return new Promise((resolve, reject) => {
            axios.get(option.url).then( response => {
                resolve(response)
            }).catch( error => {
                reject(error)
            });
        })
    }
    // 調(diào)用
    const foo = async () =>  {
        const response = await request({
            url: './demo.json'
        })
        console.log(response);
    }
    foo()

常見的封裝就長上面這樣,這樣除了方便傳參數(shù),和沒封有啥區(qū)別?

我的答案是沒區(qū)別,那我們應(yīng)該怎么來封裝呢?

看下面的代碼:

    // 封裝
    const request =  async (option = {})  => {
        const result = [null, null]
        await new Promise((resolve, reject) => {
            axios.get(option.url).then( response => {
                result[0] = response
                resolve(response)
            }).catch( error => {
                result[1] = error
                resolve(error)
            });
        })
        return result
    }
    // 調(diào)用
    const foo = async () =>  {
        const [response, error] = await request({
            url: './demo.json'
        })
        console.log(response, error);
    }
    foo()

此時(shí)此刻,看到上面的封裝,有朋友就有疑問了,那么怎么判斷呢?

我們可以通過if()來判斷呀,數(shù)組第一個(gè)為成功,第二個(gè)為失敗,默認(rèn)值都是null,我們只需要判斷不等于null就可以了呀。像下面這樣。

// 判斷請(qǐng)求成功
if(response !== null){
    console.log('請(qǐng)求成功內(nèi)容:-----');
    console.log(response.data.data);
    return
}

失敗的話判斷,同理。

// 判斷請(qǐng)求失敗
if(error !== null){
    console.log('請(qǐng)求失敗內(nèi)容:-----');
    console.log(error);
    return
}

但我更喜歡像下面這樣寫。

    // 調(diào)用
    const foo = async () =>  {
        const [response, error] = await request({
            url: './demo1.json'
        })
        // 判斷請(qǐng)求成功
        if(response !== null){
            console.log('請(qǐng)求成功內(nèi)容:-----');
            console.log(response.data.data);
            return
        }
        // 判斷請(qǐng)求失敗
        console.log('請(qǐng)求失敗內(nèi)容:-----');
        console.log(error);
        ...
    }

demo.json

下面為demo.json的內(nèi)容。

{
    "code": 200,
    "data": {
        "name": "桃小瑞"
    }
}

關(guān)于Promise

關(guān)于Promise的詳細(xì)說明及原理,以及手寫一款Promise,感興趣的朋友可以看我的這篇文章Promise詳解-手寫Promise,實(shí)現(xiàn)一款自己的簡易Promise。

感興趣了解Promise的核心之一的鏈?zhǔn)秸{(diào)用的朋友可以看我這篇文章Promise 鏈?zhǔn)秸{(diào)用原理-精簡20行代碼。

關(guān)于async/await

關(guān)于async/await我們會(huì)單獨(dú)拿一篇文章來說,感興趣的朋友可以關(guān)注我哦,因?yàn)楫?dāng)我發(fā)布后你可以更快的看到哦。

總結(jié)

以上就是我對(duì)async/await的一個(gè)簡單封裝,更多關(guān)于await Streaking原理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

义马市| 麻江县| 威远县| 舒兰市| 鸡泽县| 大城县| 教育| 宜昌市| 和硕县| 济阳县| 邛崃市| 南乐县| 平邑县| 桐城市| 巢湖市| 固阳县| 盐山县| 龙江县| 靖安县| 奇台县| 都江堰市| 天祝| 芒康县| 潜江市| 平南县| 金平| 莫力| 天柱县| 星座| 大田县| 娱乐| 郎溪县| 新化县| 长宁区| 新龙县| 巴彦淖尔市| 桓仁| 曲周县| 桐乡市| 富源县| 二连浩特市|