javascript - 当函数返回 Promise 时使其异步有什么好处吗?

标签 javascript node.js asynchronous promise async-await

当您有一个不等待任何内容并返回 promise 的函数时,您可以执行此操作。这将返回一个您可以等待的 promise 。

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)
}

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

当函数返回 Promise 时使其异步有什么好处吗?

最佳答案

从外部无法观察到差异(除非您通过 toString 获取函数源,无论如何当前的转译器都不支持),因此这里没有任何好处。

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

除了您已经提到的增强的可维护性之外,async 函数的一大优点是错误处理。函数体求值中抛出的任何异常都将转换为对返回的 Promise 的拒绝,无需明确说明这一点。

请注意,您甚至不需要在这里使用 await,您可以直接从异步函数返回 thenables1s:

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

1:除非您在 try block 内return,否则does make a difference .

关于javascript - 当函数返回 Promise 时使其异步有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37599723/

相关文章:

javascript - 使用 jquery 将内联样式添加到最后一个 li

node.js - npm install 将某些包的包锁解析从 registry.npmjs.org 更改为 registry.yarnpkg.com

javascript - 如何从异步调用返回响应?

android - Expo Developer Tools 与 Expo CLI 断开连接

c# - 应该等待 Parallel.Foreach 吗?

javascript - 如何确保 jQuery 中的 onclick 事件适用于该类新更新的元素?

javascript - 通过 Javascript 添加时显示额外模板项的 HTML 模板

javascript - 当用户使用 mCustomScrollbar onTotalScroll 到达结束滚动时,如何加载内容?

javascript - 为什么我无法从另一个组件访问 vue.js 属性?

node.js - 如何使用 Redis 作为多个 aws 实例或 ELB 的 session 存储?