- 61
- 0
// 登录
async login({ commit }, params) {
const loginFormData = new FormData()
Object.keys(params).forEach(key => {
loginFormData.append(key, params[key])
})
const useVCode = 'vcode' in params
try {
// 等待 ajax 请求完成
const res = await axios.post(
`/api/login/with/${useVCode ? 'vcode' : 'password'}`,
loginFormData
)
const data = res.data
if (data.success) {
Message.success('登录成功')
Object.keys(data.data).forEach(key => {
Vue.$cookies.set(key, data.data[key])
})
commit(constants.LOGIN, data.data)
} else {
Message.error(data.message)
}
} catch (err) {
console.log(err)
}
}
在项目的开发过程中用到了 async 函数,如何在调用该函数时捕获 axios 中抛出的错误?
// 登录
onSubmit() {
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true
const params = {
mobile: this.loginForm.mobile,
[this.useVCode ? 'vcode' : 'password']: this.useVCode
? this.loginForm.vCode
: MD5(this.loginForm.password)
}
// 如何在此处捕获 async 函数中 axios 的报错
// 比如说网络原因导致 axios 请求无法完成
// 根据 axios 的报错跳转不同的路由
this.login(params).then(() => {
this.loading = false
this.$refs.loginForm.resetFields()
const back = sessionStorage.getItem('back')
this.$router.push(back)
})
}
})
} - 共 0 条
- 全部回答
-
文在野 普通会员 1楼
在 JavaScript 中,async 函数使用
async关键字定义了一个异步函数。在异步函数中,错误可能是因为异步操作执行失败或耗时而引起的。要捕获这些错误,我们可以使用以下几种方法:- 使用
try-catch块:
```javascript async function asyncFunction() { try { // 异步操作 const result = await someAsyncOperation(); console.log(result); } catch (error) { console.error('An error occurred:', error); } }
asyncFunction(); ```
在这个例子中,
try-catch块会捕获someAsyncOperation函数中的任何异步错误,并将错误信息打印到控制台。- 使用
async/await关键字:
```javascript async function asyncFunction() { try { const result = await someAsyncOperation(); console.log(result); } catch (error) { console.error('An error occurred:', error); } }
async function someAsyncOperation() { // 异步操作 return new Promise((resolve, reject) => { setTimeout(() => { resolve('Async operation completed successfully'); }, 2000); // 这里假设操作耗时 2 秒 }); }
asyncFunction(); ```
在这个例子中,
async/await关键字用于创建一个异步函数,而someAsyncOperation函数是一个异步操作,使用setTimeout函数延迟操作 2 秒执行,然后返回一个 Promise 对象。当someAsyncOperation函数返回成功时,asyncFunction函数会捕获这个 Promise 对象的错误,并打印出错误信息。- 使用 Promise.all() 或 Promise.race():
```javascript async function asyncFunction() { try { const results = await Promise.all([ asyncFunction1(), asyncFunction2(), asyncFunction3(), ]); console.log(results); } catch (error) { console.error('An error occurred:', error); } }
async function asyncFunction1() { // 异步操作 return 'Async function 1 completed successfully'; }
async function asyncFunction2() { // 异步操作 return 'Async function 2 completed successfully'; }
async function asyncFunction3() { // 异步操作 return 'Async function 3 completed successfully'; }
asyncFunction(); ```
在这个例子中,
Promise.all()方法会等待所有异步函数的结果都返回成功,如果有一个函数返回失败,那么Promise.all()方法会捕获这个失败,并打印出错误信息。Promise.race()方法会等待所有异步函数的结果都返回成功,如果有一个函数返回失败,那么Promise.race()方法会立即打印出错误信息。注意,这些方法都会在
asyncFunction函数调用完成后捕获任何错误。如果你希望在异步函数调用后在控制台捕获错误,但不等待异步操作完成,可以使用 Promise 的catch方法,如下所示:```javascript async function asyncFunction() { try { const results = await Promise.race([ asyncFunction1(), asyncFunction2(), asyncFunction3(), ]); console.log(results); } catch (error) { console.error('An error occurred:', error); } }
asyncFunction(); ```
在这个例子中,
catch方法会在asyncFunction函数调用完成后捕获错误,并打印出错误信息。 - 使用
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
