【发布时间】:2017-08-16 23:22:15
【问题描述】:
我使用异步实现了一个函数,但它不起作用。它总是立即解决,result 总是未定义。
这是原始的异步版本:
async function validateOne(item, type, state) {
const validation = VALIDATIONS[type]
const result = !(await validation.check(state[item.name].value, state))
return result || validation.message
}
我不知道为什么它不起作用,所以我使用 Promise 重写了它,它运行良好。
function validateOne(item, type, state) {
const validation = VALIDATIONS[type]
return new Promise(resolve => {
validation.check(state[item.name].value, state).then(result =>
resolve(result || validation.message)
)
})
}
我很困惑,因为在我看来这两个实现应该是相同的(显然它们不是)。希望这是显而易见的事情,提前感谢您的任何见解!
【问题讨论】:
-
FWIW,这里不需要
new Promise:只需返回从validation.check开始的代码即可。
标签: javascript asynchronous async-await es6-promise ecmascript-2017