首页 > 解决方案 > JavaScript 中的多线程?

问题描述

我有下一个 JavaScript 代码示例:

var i = 0;

async function asyncFunction() {
  i++;
  document.write(i + "<br/>");
}

for (var j = 0; j < 1000; j++) {
  asyncFunction();
}
<html>

<head>
</head>
<body>

</body>

</html>

Google Chrome 中的输出是:

1
2
3
4
...
1000

它不是:

1
3
2
4
...
1000
999

我正在使用谷歌浏览器,它总是同步的。计划什么时候可以?

标签: javascript

解决方案


使用async,不是获取多线程的工具,而是获取单线程并发的工具。如果您想学习如何进行多线程,请查看 WebWorkers(用于在浏览器中开发)或 Node Cluster API(用于 NodeJS)。

代码输出排序:

  1. 因为通过调用异步函数,您将它放在微任务队列中,并且在循环完成后,它会以与放置顺序相同的顺序被一一调用。

  2. 调用此函数的顺序无关紧要,因为无论顺序如何,每次调用都会将 i 增加 +1。


推荐阅读