【问题标题】:Does "return await" makes any difference?“返回等待”有什么不同吗?
【发布时间】:2022-02-11 01:00:18
【问题描述】:

有什么区别

const foo = async () => {
  // some other code that uses await
  return await bar()
}

const foo = async () => {
  // some other code that uses await
  return bar()
}

bar 是一个返回承诺的函数。

await 是多余的还是有什么不同?

【问题讨论】:

    标签: javascript async-await es6-promise


    【解决方案1】:

    这是多余的。

    它从bar返回的promise中提取值,然后用它解析foo返回的promise。

    如果你直接返回bar的promise,那么foo返回的promise也会采用同样的效果。

    【讨论】:

    • 如果调用foo().then(..)await foo(),结果将相同,这是多余的。但是,我想问一下,第一种方法是否会在 foo 函数上花费更多时间,因为您需要等待 bar() 的结果,然后再将其包装在返回的 Promise 中,而第二种方法只返回 Promise bar() 直接而不试图解决它(至少在我看来是这样;我不确定)
    • 第一种方法不会等待 bar() 的结果。实际上,这实际上是一回事。 JavaScript 不会“等待”。
    【解决方案2】:

    如果 Promise 被rejected错误会在不同的地方抛出,在你写的两个例子中。

    首先,foo 内部会发生被拒绝的错误。

    第二次,调用foo的函数会发生拒绝错误

    【讨论】:

    • 在我的示例中,我认为在 foo 内或通过调用 foo 的函数引发错误之间没有任何区别,它只会向堆栈跟踪添加一个函数,但是如果我尝试一下return,那么它会有所作为吗?因为它将由foo 的try catch 处理,而不是来自调用foo 的函数的另一个处理@
    • 是的,我相信。还有堆栈跟踪,它在一些(大)项目中很重要(:
    【解决方案3】:

    是的。

    如果函数 bar() 返回一个 Promise,则在第二种情况下 foo 将返回一个待处理的 Promise(一个尚未解决的 Promise)。在第一种情况下,foo 将在等待 Promise 解析后返回 Promise 解析的数据

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多