javascript - 为什么我的无限循环在异步函数中时会阻塞?

标签 javascript asynchronous async-await es6-promise

我不明白如何使用异步函数。

为什么下面的代码会停止主线程?

async function foo() {
  for (;;) {}
}
foo();

最佳答案

async 关键字和一般的 Promise 不会使同步代码变得异步、使运行缓慢的代码变得快速或使阻塞代码变成非阻塞。

async 只是让函数返回一个 Promise,并提供(使用 await 关键字)一种与其他 Promise 交互的机制,就像同步一样。

你的函数开始一个循环,然后一直循环下去。

它不会到达函数的末尾,这将结束函数并解析它返回的 promise 。

它没有到达 await 关键字,并在等待等待的 promise 得到解决时暂停。

只是转来转去。

如果您实际上在循环中执行一些计算成本较高的操作,并且您想将其插入后台,那么您可以使用 Node.js Worker Thread或基于浏览器的Web Worker去做这件事。

关于javascript - 为什么我的无限循环在异步函数中时会阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54478255/

相关文章:

javascript - 完成 FB.getLoginStatus 后,我想返回一组信息

c++ - Boost asio, shared_from_this() error R6010, and async_read() eof

php - 通过 Ratchet\ReactPHP 发送 Action 的状态更新

C# async await Task.delay 实战

string - 如何在本地保存用户名并在每个页面 flutter 中显示

c# - 如何在 ASP.NET Web API 应用程序中调用另一种异步方法

javascript - 如何在我的网页中嵌入具有特定名称属性的网页的一部分?

javascript - jQuery 如何在删除列表中的 1 时自动调整数字列表?

javascript - 回调函数执行得太晚

javascript - 音频持续时间返回 NaN