当前位置: 首页 > 知识库问答 >
问题:

前端 - JavaScript async/await 中执行顺序问题?

万俟穆冉
2023-07-26
  const onLoadData = async () => {      await fetch("http://baidu.com");  };  const onLoadData2 = async () => {      try {        await fetch("http://souhu.com");      } catch (e) {}      try {        await fetch("http://tencent.com");      } catch (e) {}  };  onLoadData2();  onLoadData();

网址请求顺序是
souhu.com
baidu.com
tencent.com
这是什么原因呀?

共有4个答案

邹嘉致
2023-07-26

因为在JavaScript中,使用await关键字可以暂停异步函数的执行,等待Promise对象的解析结果。在onLoadData2()函数中,首先执行了await fetch("http://souhu.com"),即向"http://souhu.com"发送了一个网络请求,然后等待该请求的响应结果。如果请求成功,await后面的代码将继续执行;如果请求失败,控制权将跳转到catch块,继续执行下一个await

毕宇
2023-07-26

这涉及到微任务和宏任务,从这个角度切入你更容易理解,可以看看这篇文章:带你彻底弄懂Event Loop
企业微信截图_16903478625044.png

const loadData = async () => {  try {    await fetch("http://souhu.com");    await fetch("http://baidu.com");    await fetch("http://tencent.com");  } catch (e) {}};loadData();
酆阳煦
2023-07-26

首先两个 async 是互不影响的,所以按照题主调用顺序

执行 onLoadData2();

await fetch("http://souhu.com"); 会让

await fetch("http://tencent.com"); 等待,但 不会 影响

onLoadData();await fetch("http://baidu.com");

所以最终结果为

souhu.combaidu.comtencent.com
柯鸿振
2023-07-26

await是等待一个异步操作完成。也就是在你fetch没有响应之前不会执行后面的代码。
但是onLoadData2并没有用await,也就是在函数内部await的时候即异步执行期间,主线程继续执行,也就是执行完fetch souhu后就回到外部继续执行onLoadData,这就请求了baidu,然后才是tencent

 类似资料:
  • 下面这段代码中,为何 ws.send_text("1") 必须等待 load_dataset("beans") 加载完毕才会执行呢? 不应该是先执行 ws.send_text("1") 然后再执行 load_dataset("beans") 吗? load_dataset 是一个 加载模型数据集的函数。

  • 理想的预期输出: start async sub end promisel async sub promise async end promise2 promise3 timeout 实际浏览器控制台输出为: start async sub end promisel async sub promise promise2 promise3 async end timeout 问题1:await后的代

  • 我有一个包-'脚本' 根据剧本,我有两个类别——甲和乙 在一个类中,我有3个方法(@Test)按顺序编写- 在B班我有一种方法- TestNG. XML 在执行时——作为TestNG套件——右键单击TestNG XML并选择Run as a TestNG Suite 类B首先执行-这是因为类B中的@Test没有指定优先级,因此成为最高优先级 有没有办法让@Test的优先级只在类中起作用?为什么Te

  • 打印2的位置 怎么解释呢

  • 问题内容: 我有类似的代码 它没有在node.js中按顺序执行,因此在执行结束时得到一个空数组。问题是它将先执行然后执行 我的代码中是否有任何错误或执行此操作的任何其他方式?谢谢! 问题答案: 您可能已经知道,事情在node.js中异步运行。因此,当您需要使事物按特定顺序运行时,您需要利用控件库或基本上自己实现。 我强烈建议您看一下async,因为它可以轻松地使您执行以下操作: 在这里看到的主要内

  • 问题内容: 我试图理解这段代码,不确定为什么第二遍在第一遍之前执行。如果有人真的可以帮助我,那就太好了! 输出: 问题答案: 您没有任何内容可以显式同步两个goroutine的顺序。如果运行足够的时间,您将看到调用以不同的顺序进行打印。当执行goroutine时,由于它们是并发操作,因此无法保证它们将何时执行和/或完成。您需要使用各种标准库程序包或通道本身来同步并发运行的goroutine的执行。