我在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;
}
任何解释将是很有价值的。
答案 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 暂停执行正在调用的方法,从而保留引用。