为啥 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(..)) 的行为类似于多线程? [复制]