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
这是什么原因呀?
因为在JavaScript中,使用await关键字可以暂停异步函数的执行,等待Promise对象的解析结果。在onLoadData2()函数中,首先执行了await fetch("http://souhu.com"),即向"http://souhu.com"发送了一个网络请求,然后等待该请求的响应结果。如果请求成功,await
后面的代码将继续执行;如果请求失败,控制权将跳转到catch
块,继续执行下一个await
。
这涉及到微任务和宏任务,从这个角度切入你更容易理解,可以看看这篇文章:带你彻底弄懂Event Loop
const loadData = async () => { try { await fetch("http://souhu.com"); await fetch("http://baidu.com"); await fetch("http://tencent.com"); } catch (e) {}};loadData();
首先两个 async
是互不影响的,所以按照题主调用顺序
执行 onLoadData2();
await fetch("http://souhu.com");
会让
await fetch("http://tencent.com");
等待,但 不会 影响
onLoadData();
的 await fetch("http://baidu.com");
所以最终结果为
souhu.combaidu.comtencent.com
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的执行。