【问题标题】:Is there any benefit to making a function async when it returns a promise?当它返回一个承诺时,使函数异步有什么好处?
【发布时间】:2016-10-02 15:43:15
【问题描述】:

当你有一个不等待任何东西并返回一个承诺的函数时,你可以这样做。这将返回一个承诺,您可以await

function doSomethingAamzing ({id, animalType, accessToken}) {
  const url = `${url}/v1/${animalType}/${id}?access_token=${accessToken}`
  return request.get(url)
}

这不是必需的,但我们可以这样做。

async function doSomethingAamzing ({id, animalType, accessToken}) {
  const url = `${url}/v1/${animalType}/${id}?access_token=${accessToken}`
  return await request.get(url)
}

在后者中,作为开发人员更容易阅读该函数是异步的并且将返回一个承诺,这在第一个函数中不是很清楚。我认为使用后者可能更好的唯一原因是代码是否经过了一些静态代码分析,可以从显式 async 语法中受益。

当函数返回一个 promise 时使函数异步有什么好处?

【问题讨论】:

    标签: javascript node.js asynchronous promise async-await


    【解决方案1】:

    从外部无法观察到差异(除非您通过 toString 获得函数源,反正当前的转译器不支持),所以这里没有任何好处。

    创建函数 async 甚至可能会减慢它的速度,因为调用涉及更多的事情,创建一个新的 Promise 并解决它。

    async 函数的一大优势,除了您已经提到的增强的可维护性之外,还在于错误处理。在评估函数体时抛出的任何异常都将被转换为对返回的 Promise 的拒绝,而无需明确说明。

    注意这里你甚至不需要使用await,你可以直接return thenables1 from async functions:

    async function doSomethingAamzing ({id, animalType, accessToken}) {
      const url = `${url}/v1/${animalType}/${id}?access_token=${accessToken}`
      return request.get(url)
    }
    

    1:除非你在try 块内returning,它是does make a difference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2021-10-31
      • 2019-07-20
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 2018-09-08
      相关资源
      最近更新 更多