异步 Javascript 混淆

Jac*_*ava 0 javascript asynchronous function

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

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

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

function f1() {
  //do stuff
}

function f2() {
  //do stuff
}

function f3() {
  //do stuff
}

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

asyncFunc()
Run Code Online (Sandbox Code Playgroud)

和这个:

async function asyncf1() {
  //do stuff
}

async function asyncf2() {
  //do stuff
}

async function asyncf3() {
  //do stuff
}

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

f()
Run Code Online (Sandbox Code Playgroud)

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

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

T.J*_*der 5

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

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

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

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

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

  • 直到第一个“await”我才意识到“async”函数是同步的。我的思维模式是,他们基本上总是被派去执行一项任务。直到,谢谢你:) (2认同)