【发布时间】:2019-06-26 23:42:14
【问题描述】:
我在 JavaScript 中有一个简单的代码,它在 API 中执行请求并返回响应,很简单。但在这种情况下,我将有数千个请求。那么,哪一个代码选项会执行得更好,以及为什么。还有哪一个被推荐为这些天的好习惯?
第一个选项是使用 .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;
}
任何解释都会很有价值。
【问题讨论】:
-
您好!看看blog.pusher.com/promises-async-await。并且不要忘记用 try/catch 块包装你的 async/await 代码。
-
性能差异不应该是真正值得烦恼的事情:无论如何,http 请求肯定会占用 >99% 的执行时间。如果您可以并行启动几个请求,并通过
Promise.all加入他们的响应,则可以获得真正的收益。然后启动下一批,...等等。 -
我不确定这是否可以在这里应用,但请参阅来自 V8 开发人员的一般建议 at the end of this article:“赞成
async函数和await而不是手写的承诺代码”。 -
@NikolayVetrov - 没有理由将
await包装在try/catch中。 OP 只想返回被拒绝的承诺,async函数将捕获拒绝并自动执行此操作。在比这更复杂的错误处理情况下,try/catch将是必需的和有用的。
标签: javascript node.js async-await