为了账号安全,请及时绑定邮箱和手机立即绑定

Promise 错误處理問題 400却还是会执行success的function

Promise 错误處理問題 400却还是会执行success的function

慕工程0101907 2019-02-20 14:18:30
action 中的login 是这样的login: ({ commit, state }, { user }) => {    return login(user).then(res => {        let data = res.data        let expires = new Date(data.expires_in)        (...)        return Promise.resolve(res.data)    }, error => Promise.reject(error))},在组件中调用以这个登入为例, 如果成功的话一切都非常美好, 但如果失败, 像是故意打错帐号密码(400 Bad Req)error: [{username_password_fields: "Invalid username or password"}]errRes应该要返回上面这样的讯息, 但console 总是返回Uncaught (in promise) TypeError: Cannot read property 'data' of undefined这个undefined 的data却是 action中第三行那个data,错误的时候竟然也跑进成功的callback了, 失败的讯息却没有接收到,导致之后组件中返回的错误是 Uncaught (in promise) TypeError不知道这样是因为我哪里操作错误, 还是说promise有别种错误处理的解法?还请大大帮忙
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

login: ({ commit, state }, { user }) => new Promise((resolve, reject) => {

    login(user).then(res => {

      let data = res.data

      let expires = new Date(data.expires_in)

      (...)

      resolve(res.data)

    }, error => reject(error))

  }),

如果你的问题出在login的Promise那应该继续往回找 看你login的请求是否写的有问题


查看完整回答
反对 回复 2019-02-24
?
米脂

TA贡献1836条经验 获得超3个赞

login: async ({ commit, state }, { user }) => { 

       var res = await login(user);

       let data = res.data;

       let expires = new Date(data.expires_in);

       (...)

       return res.data;   

},

methods: {

    async login () {

        try{

            let result = await this.$store.dispatch('login', {

                user: {

                  username: this.username,

                  password: this.password

                }

             }); 

             (...)

        }catch(errorRes){

            const errors = errorRes.response.data.error

            let messages = []


            errors.forEach(error => {

              Object.keys(error).forEach(key => {

                messages.push(error[key])

              })

            })


            this.$message({

                showClose: true,

                message: messages.join(', '),

                type: 'error'

            })

         }

       

    },

}


查看完整回答
反对 回复 2019-02-24
  • 2 回答
  • 0 关注
  • 884 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信