成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Async/Await 你是會(huì)用,但是你知道怎么處理錯(cuò)誤嗎?

開(kāi)發(fā) 前端
to函數(shù)返回一個(gè)Promise且值是一個(gè)數(shù)組,數(shù)組之中有兩個(gè)元素,如果索引為0的元素不為空值,說(shuō)明該請(qǐng)求報(bào)錯(cuò),如果索引0的元素為空值說(shuō)明該請(qǐng)求沒(méi)有報(bào)錯(cuò),也就是成功。

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識(shí)點(diǎn)是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心

Promise封裝請(qǐng)求

大家平時(shí)如果使用Promise封裝請(qǐng)求,那么當(dāng)你使用這個(gè)請(qǐng)求函數(shù)的時(shí)候是這樣的:

// 封裝請(qǐng)求函數(shù)
const request = (url, params) => {
  return new Promise((resolve, reject) => {
    // ...do something
  })
}

// 使用時(shí)
const handleLogin = () => {
  request(
    '/basic/login',
    {
      usename: 'sunshine',
      password: '123456'
    }
  ).then(res => {
    // success do something
  }).catch(err => {
    // fail do something
  })
}

可以看到,當(dāng)你的請(qǐng)求成功時(shí),會(huì)調(diào)用then方法,當(dāng)你的請(qǐng)求失敗時(shí)會(huì)調(diào)用catch方法。

async/await

Promise的出現(xiàn)解決了很多問(wèn)題,但是如果請(qǐng)求多了且有順序要求的話,難免又會(huì)出現(xiàn)嵌套的問(wèn)題,可讀性較差,比如:

const handleLogin = () => {
  request(
    '/basic/login',
    {
      usename: 'sunshine',
      password: '123456'
    }
  ).then(res => {
    // 登錄成功后獲取用戶信息
    request(
      '/basic/getuserinfo',
      res.id
    ).then(info => {
      this.userInfo = info
    }).catch()
  }).catch(err => {
    // fail do something
  })

所以這個(gè)時(shí)候async/await出現(xiàn)了,他的作用是:用同步的方式執(zhí)行異步操作,上面的代碼使用async/await的話可以改寫(xiě)成:

const handleLogin = async () => {
  const res = await request('/basic/login', {
    usename: 'sunshine',
    password: '123456'
  })
  const info = await request('/basic/getuserinfo', {
    id: res.id
  })
  this.userInfo = info
}

這樣的話代碼的可讀性比較高,而不會(huì)出現(xiàn)剛剛的嵌套問(wèn)題,但是現(xiàn)在又有一個(gè)問(wèn)題了,Promise有catch這個(gè)錯(cuò)誤回調(diào)來(lái)保證請(qǐng)求錯(cuò)誤后該做什么操作,但是async/await該如何捕獲錯(cuò)誤呢?

await-to-js

其實(shí)已經(jīng)有一個(gè)庫(kù)await-to-js已經(jīng)幫我們做了這件事,我們可以看看它是怎么做的,它的源碼只有短短十幾行,我們應(yīng)該讀讀它的源碼,學(xué)學(xué)它的思想

源碼很簡(jiǎn)單

/**
 * @param { Promise } 傳進(jìn)去的請(qǐng)求函數(shù)
 * @param { Object= } errorExt - 拓展錯(cuò)誤對(duì)象
 * @return { Promise } 返回一個(gè)Promise
 */
export function to(
  promise,
  errorExt
) {
  return promise
    .then(data => [null, data])
    .catch(err => {
      if (errorExt) {
        const parsedError = Object.assign({}, err, errorExt)
        return [parsedError, undefined]
      }

      return [err, undefined]
    })
}

export default to

源碼總結(jié):to函數(shù)返回一個(gè)Promise且值是一個(gè)數(shù)組,數(shù)組之中有兩個(gè)元素,如果索引為0的元素不為空值,說(shuō)明該請(qǐng)求報(bào)錯(cuò),如果索引0的元素為空值說(shuō)明該請(qǐng)求沒(méi)有報(bào)錯(cuò),也就是成功。

使用很簡(jiǎn)單

我們?cè)撛趺慈ナ褂眠@個(gè)to函數(shù)呢?其實(shí)很簡(jiǎn)單,還是剛剛的例子

const handleLogin = async () => {
  const [resErr, res] = await to(request('/basic/login', {
    usename: 'sunshine',
    password: '123456'
  }))
  if (resErr) {
    // fail do somthing
    return
  }
  const [userErr, info] = await to(request('/basic/getuserinfo', {
    id: res.id
  }))
  if (userErr) {
    // fail do somthing
    return
  }
  this.userInfo = info
}

所以說(shuō),偶爾看看一些庫(kù)的源碼,還是能學(xué)到東西的?。?!

責(zé)任編輯:武曉燕 來(lái)源: 前端之神
相關(guān)推薦

2022-02-10 09:04:50

架構(gòu)

2010-11-23 10:21:53

跳槽

2019-01-28 17:42:33

Python數(shù)據(jù)預(yù)處理數(shù)據(jù)標(biāo)準(zhǔn)化

2013-02-27 10:27:44

GitHub

2024-12-04 08:40:19

2024-02-19 00:00:00

Docker輕量級(jí)容器

2021-01-21 09:09:18

時(shí)區(qū)轉(zhuǎn)換程序

2022-09-28 18:16:34

JavaJDK

2024-03-12 08:37:32

asyncawaitJavaScript

2023-12-20 08:23:53

NIO組件非阻塞

2015-12-01 13:33:51

UnikernelLinux運(yùn)維

2021-11-12 05:59:23

容災(zāi)備份5G

2024-11-26 00:45:29

free區(qū)域字段

2020-12-18 08:59:51

蘋(píng)果iCloud儲(chǔ)存照片

2024-03-06 09:24:50

AsyncAwaitC#

2023-06-30 08:26:24

Java注解Java程序元素

2023-01-31 09:02:24

JSVMVR

2016-09-29 15:43:33

2022-11-28 00:04:17

2024-01-15 12:16:37

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产激情视频 | 免费黄色av | 这里只有精品99re | 国产欧美一区二区精品忘忧草 | 国产在线中文字幕 | 亚洲97 | 日韩伦理一区二区 | av天天干 | 欧美aaaaa| 小早川怜子xxxxaⅴ在线 | 黄色一级片在线播放 | www.操.com| 男女午夜免费视频 | 午夜寂寞影院在线观看 | 成人精品一区二区三区 | 日日夜夜免费精品视频 | 一二三四在线视频观看社区 | 精品久久久久久久久久久久 | 国产精品视频一区二区三区, | 91av视频在线观看 | 夜夜骚 | 天天干天天干 | 伊人网综合在线观看 | 久久69精品久久久久久久电影好 | 99色在线视频 | 成人免费在线小视频 | 操操操av | 成人欧美一区二区三区黑人孕妇 | 欧美日韩高清一区 | 九九久久久 | yiren22综合网成人 | 一级毛片视频在线 | 国产一区二区三区在线看 | 一区二区久久 | 中文字幕在线一区二区三区 | 在线欧美视频 | 男人天堂99 | 国产精品视频久久 | 在线免费观看黄色 | 免费在线一区二区 | 亚洲三区在线观看 |