javascript async / await版本与Promise版本的功能不起作用

时间:2017-03-24 05:59:10

标签: javascript asynchronous async-await es6-promise ecmascript-2017

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

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

2 个答案:

答案 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)

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