Javascript中async與await的捕捉錯誤詳解
更新時間:2022年03月03日 15:05:23 作者:小渣亮
這篇文章主要為大家詳細(xì)介紹了Javascript中async與await的捕捉錯誤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
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() // 報錯運(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
異步嵌套使用了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)文章
JS大坑之19位數(shù)的Number型精度丟失問題詳解
這篇文章主要介紹了JS大坑之19位數(shù)的Number型精度丟失問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04微信小程序整個頁面的自動適應(yīng)布局的實現(xiàn)
這篇文章主要介紹了微信小程序整個頁面的自動適應(yīng)布局的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07JavaScript中in和hasOwnProperty區(qū)別詳解
in操作符只要通過對象能訪問到屬性就返回true。hasOwnProperty()只在屬性存在于實例中時才返回true。下面通過本文給大家分享JavaScript中in和hasOwnProperty區(qū)別詳解,感興趣的朋友一起看看吧2017-08-08JavaScript安全加密之禁止別人調(diào)試自己的前端頁面代碼實現(xiàn)
這篇文章主要為大家介紹了JavaScript安全加密之如何禁止別人調(diào)試自己的前端頁面代碼實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08