账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何捕获 async 函数中的错误?
    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
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 文在野 普通会员 1楼

      在 JavaScript 中,async 函数使用 async 关键字定义了一个异步函数。在异步函数中,错误可能是因为异步操作执行失败或耗时而引起的。要捕获这些错误,我们可以使用以下几种方法:

      1. 使用 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 函数中的任何异步错误,并将错误信息打印到控制台。

      1. 使用 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 对象的错误,并打印出错误信息。

      1. 使用 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 函数调用完成后捕获错误,并打印出错误信息。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部