javascript - 异步/等待未按预期运行
问题描述
我正在学习如何使用 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 的一个函数,用于验证我的表单输入。更多关于它在这里,也许它会帮助通知你们中的任何人。
那么我在这里到底做错了什么?
解决方案
异步等待的存在是为了简化使用 Promise 的语法。如果你没有使用 Promise,那么 async/await 将一无所获。
看起来 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);
}
}
推荐阅读
- r - 在 R 中创建堆叠条形图并按降序对组件进行排序
- drupal - Drupal 的 CAS 身份验证失败,但可以独立运行
- command-line - 如何退出命令但不退出解释器?
- java - 使用 JAVA 并行流时是否可以为每个线程传递资源?
- r - 如何将 Excel 中的单元格格式(缩进)信息读入 R?
- apache-fop - FOP 2.1 找不到 Tahoma 字体
- c - 汉明码 (255 247) 可以检测和纠正多少位?
- javascript - 在 Firestore 中获取查询的大小
- vim - 为什么“$d”命令在 vim 的 ex 模式下不起作用?
- java - 如何使用 java 从 Oracle 检索 Long