我开始学习异步 Javascript,但我真的很困惑。
老实说,异步/等待方法对我来说似乎非常合乎逻辑。我们需要让运行时知道我们正在执行异步操作,以便它可以相应地处理它。但是为什么我们在使用 .then() 方法时不需要做同样的事情呢?我的意思是,如果 Javascript 已经能够理解何时处理 Promise,那么是否不能像 .then() 一样在没有异步的情况下使用 wait ?
更令人困惑的是,我看到人们直接在使用 async 关键字声明的函数内使用 .then() 。async/await 不应该是 .then().catch() 方法的语法糖吗?为什么它们可以组合在一起,尤其是相互组合在一起?对异步函数的结果使用 .then() 不会那么令人困惑,但彼此内部让我更难理解这一点。
我确实到处寻找对此的解释,但找不到这个确切问题的答案。我发现人们说你可以使用这两种方法,因为它们本质上是同一件事,但当你了解细节时,事情并不是很清楚。
所以 async 函数总是返回一个承诺。在其中,await 总是处理承诺。.then() 可以链接到await 函数。.then() 也可以链接到异步函数的结果。如果我们不想在等待上使用 try/catch ,则与 .catch 方法相同。为什么这么混乱?我们可以在没有 .then() 的情况下处理异步返回吗?如果 async/await 确实是 .then() 的语法糖,为什么 .then() 在解析后也不总是返回一个 Promise?
如果有人可以帮助澄清,我将不胜感激。谢谢你!