异步/等待行为异常

时间:2019-05-02 22:51:28

标签: javascript vue.js

我正在学习如何使用Async / Await,据我所知,它应该等到Await完成执行后再继续执行代码。

但是,我的代码在等待后完全停止执行,这是我的方法(我正在使用Vue):

async register () {
  await this.form.validateFields((err, values) => {
    if (err) {
      return
    }
   alert('this gets executed if err is empty')
  })
  alert('this never gets get executed, why?') 
}

validateFields()是Vue的Ant Design版本的函数,并验证我的表单输入。关于here的更多信息,也许它可以帮助告知您任何人。

那么我到底在做什么错了?

1 个答案:

答案 0 :(得分:2)

存在异步等待以简化使用Promise的语法。如果您不使用诺言,那么异步/等待不会给您带来任何好处。

看来validateFields使用的是回调而不是promise,因此您需要围绕它创建自己的promise。例如:

async register () {
  try {
    const values = await new Promise((resolve, reject) => {
      this.form.validateFields((err, values) => {
        if (err) {
          reject (err);
        } else {
          resolve(values);
        }
      })
    })
    console.log('got values', values);
  } catch (error) {
    console.log('caught an error', error);
  }
}