开发者问题收集

Async/Await 行为不符合预期

2019-05-02
226

我正在学习如何使用 Async/Await,据我所知,它应该等到 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 的一个函数,用于验证我的表单输入。有关它的更多信息 这里 ,也许它会帮助通知你们任何人。

那么我到底做错了什么?

1个回答

Async await 的存在是为了简化使用承诺的语法。如果您不使用承诺,那么 async/await 对您没有任何帮助。

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

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);
  }
}
Nicholas Tower
2019-05-02