异步/等待VS那么这是最好的表现?

时间:2019-02-02 17:41:45

标签: javascript node.js async-await

我在JavaScript中有一个简单的代码,可以在API中执行请求并返回响应。但是在这种情况下,我将有成千上万的请求。所以,代码选择哪一个会更好地履行,以及为什么。此外,其中一个被推荐为好pratices可好?

第一个选项使用.then来解决承诺,第二个选择使用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;
}

任何解释将是很有价值的。

2 个答案:

答案 0 :(得分:4)

await只是.then()的内部版本(基本相同)。选择一个比其他的原因并没有真正有业绩做的,但与所需的编码风格或编码方便的事情。当然,解释器内部带有await的{​​{3}},但不太可能应该由您决定如何使用。如果其他所有条件都相同,则出于上述原因,我将选择await。但是,我首先选择使代码更易于编写,理解,维护和测试的

await通常可以a few more opportunities to optimize things使用得当。这就是它被发明的原因。

两个版本的代码之间没有有意义的区别。二者达到相同的结果,当Axios的呼叫成功,或具有错误。

await可以带来更多便利的地方是,如果您有多个需要序列化的连续异步调用。然后,而不是正确地包围他们每人一个.then()处理程序链里面他们,你可以只使用await,并有简单的看代码。

await.then()的常见错误是忘记正确的错误处理。如果此函数中的错误处理愿望只是返回被拒绝的承诺,则两个版本都将执行相同的操作。但是,如果你有一排多个异步调用,你想做的任何事情更加复杂的不仅仅是返回第一拒绝,那么save you a bunch of lines of code making your code simpler to read, test and maintain有很大不同,这似乎是简单的将取决于形势。

答案 1 :(得分:0)

其实。 由于 Promise.then() 在执行后失去了它被调用的范围,所以 Await/Async 可以更高效,您正在将回调附加到回调堆栈。

其原因是:系统现在必须存储对 .then() 调用位置的引用。如果出现错误,它必须正确指向错误发生的位置,否则,如果没有范围(因为系统在调用 Promise 后恢复执行,等待稍后返回 .then()),它无法指向错误发生的地方。

Async/Await 暂停执行正在调用的方法,从而保留引用。