我使用async实现了一个函数,它不起作用。它总是立即解析,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)
)
})
}
我很困惑,因为在我看来这两个实现应该是相同的(显然它们不是)。希望这是显而易见的事情,提前感谢任何见解!
答案 0 :(得分:1)
我认为您的async function
包含不必要的逻辑非!
运算符。尝试:
async function validateOne(item, type, state) {
const validation = VALIDATIONS[type]
const result = await validation.check(state[item.name].value, state)
return result || validation.message
}
或者,这可以缩短为:
async function validateOne(item, type, state) {
const validation = VALIDATIONS[type]
return (await validation.check(state[item.name].value, state)) || validation.message
}
答案 1 :(得分:0)
没关系,我有一个错字,其中一个版本否定了结果而另一个版本没有!事实上,除了那个错字之外,它们是相同的!