异步函数返回一个promise

Che*_*hen 0 javascript node.js promise async-await

我在网上找到了一个如下所示的示例:

async function asyncFunc() {
    return Promise.resolve(123);
}
asyncFunc()
  .then(x => console.log(x)) // 123
Run Code Online (Sandbox Code Playgroud)

但是,我也可以这样写:

async function asyncFunc() {
    return 123
}
asyncFunc()
  .then(x => console.log(x)) // 123
Run Code Online (Sandbox Code Playgroud)

我的意思是,我可以找到一个用于返回已解决的答案的用例(例如,memoization/caching),但是如果我可以直接返回结果,为什么还要实际使用它呢?

CRi*_*ice 6

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function:

当调用异步函数时,它返回一个Promise.当异步函数返回一个值时,将使用返回的值解析Promise. 当异步函数抛出异常或某个值时,将使用抛出的值拒绝Promise.

强调我的.

尽管在第一种情况下返回已解决的承诺是不必要的,但您的示例都是完全有效的.任何返回普通值的异步函数都会自动将该值包装到已解析的promise中.我认为通常人们更喜欢第二个例子,因为它更直接.

  • 我同意没有明确承诺的`async`版本更清晰,但不幸的是,很多人都没有意识到这个功能,并且会引起很多混乱. (2认同)