在webworker(javascript)中的同步函数中等待异步执行

在webworker(javascript)中的同步函数中等待异步执行,javascript,asynchronous,async-await,web-worker,synchronous,Javascript,Asynchronous,Async Await,Web Worker,Synchronous,我知道,在正常的dom范围内,您不能等待同步函数中的异步结果,因为这会阻塞UI 现在,在webworker中,可以阻止线程。是否有某种方法可以在不使用wait/async的情况下等待异步结果?我也在寻找黑客 使用await/async/Promise,我的解决方案已经运行良好。我希望避免等待的原因是,我为用户提供了编写在web worker中执行的代码的可能性。作为我听众的一部分,我想让事情简单一些,不必仅仅因为他们应该能够执行异步函数而介绍整个承诺概念 我想模仿一个你可以说的同步Api。但是在

我知道,在正常的dom范围内,您不能等待同步函数中的异步结果,因为这会阻塞UI

现在,在webworker中,可以阻止线程。是否有某种方法可以在不使用wait/async的情况下等待异步结果?我也在寻找黑客

使用await/async/Promise,我的解决方案已经运行良好。我希望避免等待的原因是,我为用户提供了编写在web worker中执行的代码的可能性。作为我听众的一部分,我想让事情简单一些,不必仅仅因为他们应该能够执行异步函数而介绍整个承诺概念

我想模仿一个你可以说的同步Api。但是在他们应该调用的函数的核心中有异步代码

我理解为什么JS是这样设计的,但是我觉得系统保护我不让我在一个可以阻止线程的情况下阻止线程是愚蠢的

谢谢
Lukas

我认为在这种情况下,你可以使用“我知道循环直到结果出现的解决方案”不,它不是。从来都不是。不是因为“这将占用我的CPU”,而是因为循环本身(称为“忙等待”)将占用正在等待的线程,因此由于线程忙,您永远无法获得它。您可能需要解释为什么要尝试避免
wait
,这正是为您的情况而设计的。您可以使用承诺在承诺得到解决(异步函数完成)时执行代码。基本上是通过提供函数返回后需要运行的代码来“等待”函数完成。一些通常异步的Web API在Web Workers中以同步形式提供(例如FileReaderSync和XHR),但除此之外,代码在Worker中运行这一事实并不会改变JS的工作方式。考虑到您的项目,最好是分析传递的代码(AST)并自己重写,在需要的地方添加
wait
s。