【问题标题】:When should I be using async/await and when should I be using callbacks [js]?我什么时候应该使用 async/await,什么时候应该使用回调 [js]?
【发布时间】:2021-08-11 16:06:21
【问题描述】:

我的 API 调用通常采用类似于以下的回调模式进行格式化:

axios.get('http://localhost:8080/api/announcements')
  .then((res) => res)
  .catch((err) => err)

但是,我最近遇到了 async/await,下面的函数似乎做同样的事情,但更简洁。

const response = await axios.get('http://localhost:8080/api/announcements');
return response

什么时候应该使用回调模式,什么时候应该使用 async/await?

【问题讨论】:

  • 我不是专业人士,但我想说使用.then() 更适用于你只想调用一个promise 的函数,而async/await 更适合你想存储已解决的承诺。
  • 我认为无论人们提出什么建议,他们都会不知何故介于主观和客观之间。这是我的:如果可能,使用async/await,如有必要,使用promise API。原因是async/await 使用/需要更少的样板代码并且更具表现力。

标签: javascript async-await callback


【解决方案1】:

它们在 2 种不同的语法中只是相同的东西,在它们之间进行选择只是个人喜好。对我来说,我总是选择async/await 而不是.then().catch(),因为:

  1. 更容易实现复杂的异步逻辑:使用.then(),如果您希望它在任务完成后运行,程序的其余部分必须位于.then() 块中。如果你需要再次返回一个承诺,你需要使用链式.then()。对于更复杂的情况(解决之前的多个承诺、承诺循环等),解决方案变得更加难以实施。在多种情况下,我必须重写 async/await 中的所有代码。
  2. 熟悉的跨语言语法:使用async/await,代码就像任何普通代码一样编写。我可以使用循环、多个承诺和正常的“返回”来轻松返回等待的值。 .catch 通常不存在于其他语言中,而是一个 try catch 块,使其他语言的人更容易理解。

【讨论】:

  • 经过检查,async/await 似乎是语法糖,在功能上与 .then() / .catch() 相同,只是一个返回一个promise对象,另一个是原始数据.
猜你喜欢
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 2023-04-02
  • 2011-04-15
  • 2017-04-10
  • 2012-03-19
相关资源
最近更新 更多