为啥 JavaScript 需要“等待”? [复制]

Posted

技术标签:

【中文标题】为啥 JavaScript 需要“等待”? [复制]【英文标题】:Why is 'await' necessary for javascript? [duplicate]为什么 JavaScript 需要“等待”? [复制] 【发布时间】:2021-10-04 15:05:58 【问题描述】:

我的理解是 javascript 是单线程的,这意味着它一次只会执行一行。

对于下面的代码,为什么需要'await'?我认为它仍然会在移动到下一行之前执行 fetch:

const res = await fetch('http://testurl.com');

有人可以解释 await 在单线程语言中的重要性吗?

谢谢

【问题讨论】:

js确实是单线程的,但也可以是异步的 也许这有帮助:developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop 也许太挑剔了,但是:将其视为“一次一行”执行是不对的。那么console.log( \n " foo" \n);\n 代表换行符)呢? console.log( 不会在 "foo" 之前执行,等等。在评估代码之前,它会被解析为其他表示语句和表达式的表示。这些是一个接一个地执行的。 【参考方案1】:

两种类型的功能都可以在功能中“暂停”,

异步函数 生成器函数

所以虽然你是对的,但一次只会执行 1 行,await 基本上告诉 Javascript:

这个函数现在被暂停,一旦这个 promise 解决,这个函数就会恢复。

当函数暂停时,其他代码可以运行。但是“只有 1 行代码会运行”的规则仍然成立。

【讨论】:

以上是关于为啥 JavaScript 需要“等待”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 for 循环时,为啥我的代码没有在 forEach 中等待? [复制]

为啥需要引用索引? [复制]

JavaScript 中是不是有睡眠/暂停/等待功能? [复制]

在控制台应用程序中,为啥在等待的异步任务中使用同步阻塞代码 (Thread.Sleep(..)) 的行为类似于多线程? [复制]

为啥我们需要使用 package.json? [复制]

为啥 + [] 在 Javascript 中返回 0? [复制]