【问题标题】:javascript async/await version versus Promise version of function doesn't work [closed]javascript async/await 版本与 Promise 版本的函数不起作用 [关闭]
【发布时间】: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


【解决方案1】:

我认为您的 async function 包含不必要的逻辑 not ! 运算符。试试:

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
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 2018-01-14
      • 2023-03-09
      • 1970-01-01
      • 2019-09-16
      • 2019-09-25
      • 1970-01-01
      • 2012-07-12
      相关资源
      最近更新 更多