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
異步嵌套使用了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)文章
關(guān)于JavaScript中var聲明變量作用域的推斷
這個問題其實(shí)之前困擾了我很久。如今終于想明白了,特來分享,如果有錯誤的地方,請幫忙指正,我會隨時回來修正滴。2010-12-12
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)懸停提示的方法,實(shí)例分析了javascript操作css的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
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針對類字典的插入與更新技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
d3.js入門教程之?dāng)?shù)據(jù)綁定詳解
這篇文章主要介紹了關(guān)于d3.js數(shù)據(jù)綁定的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)只d3.js具有一定的參考價(jià)值,需要的朋友下面來一起看看吧。2017-04-04

