0

我使用 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)
    )
  })
}

我很困惑,因为在我看来这两个实现应该是相同的(显然它们不是)。希望这是显而易见的,在此先感谢您的任何见解!

4

2 回答 2

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
}
于 2017-03-24T06:08:22.743 回答
0

没关系,我有一个错字,一个版本否定结果,另一个版本不是!实际上,除了那个错字之外,它们是相同的!

于 2017-03-24T06:08:09.797 回答