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

Javascript中async與await的捕捉錯誤詳解

 更新時間:2022年03月03日 15:05:23   作者:小渣亮  
這篇文章主要為大家詳細(xì)介紹了Javascript中async與await的捕捉錯誤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

async與await捕捉錯誤

正常的輸出時

<template>
  <div class="hello">
	</div>
</template>

<script>
export default {
  name: 'HelloWorld',
  created() {
    this.init()
  },
  methods: {
    init() {
      let p1 = new Promise((resolve) => {
        setTimeout(() => {
          resolve(666)
        }, 1000)
      })
      async function run() {
        let res = await p1
        console.log('res', res)
      }
      run()
      // 正常的調(diào)用時候:log輸出 666
    },
  },
}
</script>

try catch捕捉錯誤

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <p>
      For a guide and recipes on how to configure / customize this project,<br />
      check out the
      <a  target="_blank" rel="noopener">vue-cli documentation</a>.
    </p>
    <h3>Installed CLI Plugins</h3>
    <ul>
      <li><a  target="_blank" rel="noopener">babel</a></li>
      <li><a  target="_blank" rel="noopener">eslint</a></li>
    </ul>
    <h3>Essential Links</h3>
    <ul>
      <li><a  target="_blank" rel="noopener">Core Docs</a></li>
      <li><a  target="_blank" rel="noopener">Forum</a></li>
      <li><a  target="_blank" rel="noopener">Community Chat</a></li>
      <li><a  target="_blank" rel="noopener">Twitter</a></li>
      <li><a  target="_blank" rel="noopener">News</a></li>
    </ul>
    <h3>Ecosystem</h3>
    <ul>
      <li><a  target="_blank" rel="noopener">vue-router</a></li>
      <li><a  target="_blank" rel="noopener">vuex</a></li>
      <li><a  target="_blank" rel="noopener">vue-devtools</a></li>
      <li><a  target="_blank" rel="noopener">vue-loader</a></li>
      <li><a  target="_blank" rel="noopener">awesome-vue</a></li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String,
  },
  created() {
    this.init()
  },
  methods: {
    init() {
      let p1 = new Promise((reject) => {
        setTimeout(() => {
          reject(new Error('錯誤了哦'))
        }, 1000)
      })
      async function run() {
        try {
          let res = await p1
          console.log('res', res)
        } catch (error) {
          console.log('error', error)
        }
      }
      run()
      // 報(bào)錯運(yùn)行 res Error: 錯誤了哦
    },
  },
}
</script>

多個異步嵌套時

沒有try {} catch {} 捕捉錯誤的

<template>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String,
  },
  created() {
    this.init()
  },
  methods: {
    init() {
      let p1 = new Promise((resolve) => {
        setTimeout(() => {
          // reject(new Error('錯誤了哦'))
          resolve(1)
        }, 1000)
      })
      let p2 = function (arg) {
        return new Promise((reject) => {
          setTimeout(() => {
            console.log('arg', arg)
            reject(new Error('錯誤了哦'))
          }, 1000)
        })
      }
      async function run() {
        const res1 = await p1
        console.log('res1', res1) // 1
        const res2 = await p2(res1)
        console.log('res2', res2) // res2 Error: 錯誤了哦
      }
      run()
    },
  },
}
</script>

適使用try{} catch {} 捕捉錯誤的

<template>
  <div>HelloWorld</div>
</template>

<script>
export default {
  name: 'HelloWorld',
  components: {},
  data() {
    return {}
  },
  created() {
    this.init()
  },
  methods: {
    init() {
      let p1 = new Promise((resolve) => {
        setTimeout(() => {
          // reject(new Error('錯誤了哦'))
          resolve(1)
        }, 1000)
      })
      let p2 = function (arg) {
        return new Promise((reject) => {
          setTimeout(() => {
            console.log('arg', arg)
            reject(new Error('錯誤了哦'))
          }, 1000)
        })
      }
      async function run() {
        try {
          var res1 = await p1
          console.log('res1', res1)
        } catch (error) {
          return new Error('error1', error)
        }
        try {
          const res2 = await p2(res1)
          console.log('res2', res2)
        } catch (error) {
          return new Error('error2', error)
        }
      }
      run()
    },
  },
}
</script>
<style lang="scss" scoped></style>

效果

在這里插入圖片描述

 await-to-js

await-to-js官網(wǎng)

異步嵌套使用了try,代碼相對不夠智能

  • 特別使用第三方的npm包 await-to-js
  • 作用:無需 try-catch 即可輕松處理錯誤的異步等待包裝器
  • 下載:yarn add await-to-js -S
  • 使用
<template>
  <div>HelloWorld</div>
</template>

<script>
import awaitTo from 'await-to-js'
export default {
  name: 'HelloWorld',
  components: {},
  data() {
    return {}
  },
  created() {
    this.init()
  },
  methods: {
    init() {
      let p1 = new Promise((resolve) => {
        setTimeout(() => {
          // reject(new Error('錯誤了哦'))
          resolve(1)
        }, 1000)
      })
      let p2 = function (arg) {
        return new Promise((reject) => {
          setTimeout(() => {
            console.log('arg', arg)
            reject(new Error('錯誤了哦'))
          }, 1000)
        })
      }
      async function run() {
        const [err, res1] = await awaitTo(p1)
        if (err) throw new Error('錯誤1')
        console.log('res1', res1)
        const [err2, res2] = await awaitTo(p2(res1))
        if (err2) throw new Error('錯誤2')
        console.log('res2', res2)
      }
      run()
    },
  },
}
</script>
<style lang="scss" scoped></style>

效果:

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!       

相關(guān)文章

  • JavaScript預(yù)編譯的基本概念和過程詳解

    JavaScript預(yù)編譯的基本概念和過程詳解

    JavaScript在執(zhí)行代碼前,會進(jìn)行一個預(yù)編譯的過程,這個過程主要用于處理變量和函數(shù)聲明,預(yù)編譯分為全局預(yù)編譯和函數(shù)預(yù)編譯,本文將給大家詳細(xì)的介紹一下JavaScript預(yù)編譯的基本概念和過程,需要的朋友可以參考下
    2024-05-05
  • 關(guān)于JavaScript中var聲明變量作用域的推斷

    關(guān)于JavaScript中var聲明變量作用域的推斷

    這個問題其實(shí)之前困擾了我很久。如今終于想明白了,特來分享,如果有錯誤的地方,請幫忙指正,我會隨時回來修正滴。
    2010-12-12
  • js跨瀏覽器實(shí)現(xiàn)將字符串轉(zhuǎn)化為xml對象的方法

    js跨瀏覽器實(shí)現(xiàn)將字符串轉(zhuǎn)化為xml對象的方法

    將字符串轉(zhuǎn)化為xml對象需要注意的是該死的ie多版本的問題,具體實(shí)現(xiàn)如下,感興趣的朋友不妨參考下本文,希望對大家有所幫助
    2013-09-09
  • js實(shí)現(xiàn)動畫特效的文字鏈接鼠標(biāo)懸停提示的方法

    js實(shí)現(xiàn)動畫特效的文字鏈接鼠標(biāo)懸停提示的方法

    這篇文章主要介紹了js實(shí)現(xiàn)動畫特效的文字鏈接鼠標(biāo)懸停提示的方法,實(shí)例分析了javascript操作css的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Javascript類庫的頂層對象名用戶體驗(yàn)分析

    Javascript類庫的頂層對象名用戶體驗(yàn)分析

    針對jQuery、Ext、KISSY三者類庫的對比及分析已經(jīng)很多了,但多數(shù)是從功能和設(shè)計(jì)的角度切入,因此本篇文章決定換一個特殊的角度,從各類庫的頂層對象名的鍵盤輸入的體驗(yàn)上來對這三個類庫進(jìn)行比較。
    2010-10-10
  • JavaScript獲取表單enctype屬性的方法

    JavaScript獲取表單enctype屬性的方法

    這篇文章主要介紹了JavaScript獲取表單enctype屬性的方法,涉及javascript操作表單屬性的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • JavaScript代碼實(shí)現(xiàn)簡單計(jì)算器

    JavaScript代碼實(shí)現(xiàn)簡單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了JavaScript代碼實(shí)現(xiàn)簡單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JavaScript實(shí)現(xiàn)的類字典插入或更新方法實(shí)例

    JavaScript實(shí)現(xiàn)的類字典插入或更新方法實(shí)例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)的類字典插入或更新方法,實(shí)例分析了javascript針對類字典的插入與更新技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • d3.js入門教程之?dāng)?shù)據(jù)綁定詳解

    d3.js入門教程之?dāng)?shù)據(jù)綁定詳解

    這篇文章主要介紹了關(guān)于d3.js數(shù)據(jù)綁定的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)只d3.js具有一定的參考價(jià)值,需要的朋友下面來一起看看吧。
    2017-04-04
  • jsp 自動編譯機(jī)制詳細(xì)介紹

    jsp 自動編譯機(jī)制詳細(xì)介紹

    這篇文章主要介紹了 Jasper的自動檢測實(shí)現(xiàn)的機(jī)制比較簡單,依靠某后臺線程不斷檢測JSP文件與編譯后的class文件的最后修改時間是否相同,若相同則認(rèn)為沒有改動,但倘若不同則需要重新編譯,需要的朋友可以參考下
    2016-12-12

最新評論

秦皇岛市| 天镇县| 碌曲县| 体育| 新化县| 定日县| 四川省| 油尖旺区| 台山市| 庄河市| 通辽市| 绍兴县| 马公市| 明溪县| 遂川县| 张家口市| 桃源县| 南岸区| 崇州市| 无极县| 玉林市| 饶河县| 玛沁县| 中西区| 安福县| 建湖县| 田林县| 天全县| 赤壁市| 江川县| 龙川县| 湖口县| 淮阳县| 衡阳市| 金平| 报价| 北海市| 陇川县| 漠河县| 道真| 鄂伦春自治旗|