javascript - Async/await vs then 哪个性能最好?

标签 javascript node.js async-await

我有一个简单的 JavaScript 代码,它在 API 中执行请求并返回响应,很简单。但在这种情况下,我会有成千上万的请求。那么,哪一个代码选项会执行得更好,为什么。另外,最近推荐哪一个作为良好实践?

第一个选项是使用 .then 来解决 promise ,第二个选项是使用 async/await。

在我的测试中,这两个选项的结果非常相似,没有显着差异,但我不确定规模。

// Using then
doSomething(payload) {
  const url = 'https://link-here/consultas';
  return this.axios.get(url, {
    params: {
      token: payload.token,
      chave: payload.chave,
    },
   }).then(resp => resp.data);
}

// Using Async / await
async doSomething(payload) {
   const url = 'https://link-here/consultas';
   const resp = await this.axios.get(url, {
   params: {
     token: payload.token,
     chave: payload.chave,
    },
 });
 return resp.data;
}

任何解释都会很有值(value)。

最佳答案

从性能的 Angular 来看,await 只是 .then() 的内部版本(做的事情基本相同)。选择一个而不是另一个的原因实际上与性能无关,而与所需的编码风格或编码便利性有关。当然,口译员有a few more opportunities to optimize things在内部使用 await,但您不太可能决定使用哪个。如果其他条件相同,我会选择 await,原因如上。但是,我会首先选择使代码更易于编写、理解、维护和测试的方法。

使用得当,await经常可以save you a bunch of lines of code making your code simpler to read, test and maintain .这就是发明它的原因。

您的代码的两个版本之间没有明显区别。无论调用axios成功还是出错,两者的结果都是一样的。

如果您有多个需要序列化的连续异步调用,await 可以带来更多便利。然后,与其将它们分别放在 .then() 处理程序中以正确链接它们,不如使用 await 并使代码看起来更简单。

await.then() 的一个常见错误是忘记了正确的错误处理。如果您在此函数中的错误处理愿望只是返回被拒绝的 promise ,那么您的两个版本都会以相同的方式执行此操作。但是,如果你连续有多个异步调用,并且你想做比返回第一个拒绝更复杂的事情,那么 error handling techniques for await and .then()/.catch()完全不同,哪个看起来更简单将取决于情况。

关于javascript - Async/await vs then 哪个性能最好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495711/

相关文章:

php - 如何从 PHP 脚本发送 JSON 数据以供 jQuery 使用?

javascript - 无法安装 babel-cli

c# - 为什么在不使用 async/await 的情况下使用 Dapper QueryAsync<T> 时抛出 TaskCanceledException?

javascript - jquery 加载函数只获取 div 而不是整个页面

javascript - Jquery 改变类和触发器

javascript - 我无法停止异步

node.js - 通过 NodeJS 服务器从 Amazon S3 传递文件而不暴露 S3 URL?

c# - 同步到异步的异步工作有奇怪的行为

c# - 如何将 WaitAll 任务的结果分配给变量

javascript - 在javascript中,当一个函数名被指向其他地方后,有什么方法可以到达那个未命名的函数吗?