异步Javascript混淆

我对 Javascript 还很陌生,正在写这篇文章,所以如果我有任何错误,请纠正我。

据我所知,异步函数允许其他进程在后台运行,然后在函数完成后,它返回一个可以解决或拒绝的承诺。此外,由于异步函数中的进程不按设定顺序运行,我们可以使用 await 关键字停止执行,直到进程完成。

然而,让我感到困惑的是代码执行之间的差异

function f1() {
  //do stuff
}

function f2() {
  //do stuff
}

function f3() {
  //do stuff
}

async function asyncFunc() {
  f1()
  f2()
  f3()
}

asyncFunc()

和这个:

async function asyncf1() {
  //do stuff
}

async function asyncf2() {
  //do stuff
}

async function asyncf3() {
  //do stuff
}

function f() {
  asyncf1()
  asyncf2()
  asyncf3()
}

f()

????? (除了第一个例子返回一个承诺的明显事实)

在同步函数中调用异步函数与在异步函数中调用同步函数是否相同?它们都产生相同的输出吗?如果是这样,哪一个比另一个更受欢迎?

回答

要理解的关键是async函数是使用promises 的语法糖。无论是async功能还是承诺让在后台发生任何事。它们让您等待并响应后台已经发生的事情(例如计时器或 HTTP 操作完成)。

一个async函数在第一个或之前是同步的。(这样它就可以启动它然后等待的任何异步进程。)在这一点上,它返回一个承诺,该承诺将被履行或拒绝,具体取决于正在执行的承诺和/或您返回的内容。awaitreturnawait

await暂停函数的逻辑,直到/除非被awaited的承诺解决。(如果您使用await valuewhere valueis not athenable [a promise-like thing],那么您实际上是在做await Promise.resolve(value)。)

您还没有显示asyncFuncX函数的任何内容,但除非它们有await什么,否则它们是完全同步的。

您可能会发现我几天前的回答也很有用。

  • I hadn't realized `async` functions are sync until the first `await`. My mental model had been that they are basically always dispatched into a task. TIL, thank you 🙂

以上是异步Javascript混淆的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>