首页 > 解决方案 > 为什么 Javascript Async 在 Chrome 扩展程序中不能并行工作

问题描述

我正在开发 chrome 扩展。不知何故,当我在异步函数中使用 while 循环时,扩展程序会阻止网站加载。

为简单起见,我访问了网站,打开了 Chrome Dev Inspector 并在控制台中运行了这段代码:

async function testFunction(){
   while(1) {}
}

testFunction()

这是异步内部的无限循环。异步应该并行工作,因此它不应该对网站的加载造成任何问题,但确实如此。该网站停止加载任何进一步。我是怎么确认的?我根本无法移动滚动条,它停止工作。

编辑: 因为我现在知道异步不像多线程那样真正并行,所以我想添加我面临的真正问题并想问如何解决它:

在“FOR 循环”中,我需要注入 iframe,然后需要等待它加载。之后,对 iframe 做一些处理,循环结束。对于下一次迭代,iframe SRC 被另一个 SRC 替换,并且重复之前的过程。问题是我必须等待 iframe 加载完成,而 while 循环无法完成(它本身会停止 iframe 的加载,这会破坏整点)。你有什么建议?

标签: javascript

解决方案


JavaScript 没有并发执行模型(我认为除了网络工作者)。如果你有一个无限循环,一切都会被阻塞。

async只是建立在承诺之上的语法糖,它试图避免回调地狱

例如这篇文章提供了更多的见解:https ://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff (还有更多)


推荐阅读