Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以异步运行WebAssembly代码?_Javascript_C_Angular_Typescript_Webassembly - Fatal编程技术网

Javascript 是否可以异步运行WebAssembly代码?

Javascript 是否可以异步运行WebAssembly代码?,javascript,c,angular,typescript,webassembly,Javascript,C,Angular,Typescript,Webassembly,我已经编写了一个C函数,可以使用WebAssembly从Angular/TypeScript/JavaScript执行该函数: testWebAssembly() { Module.ccall("aCFunction", null, [], []); // takes a few seconds to finish } 此函数执行一些繁重的数学计算,需要几秒钟才能完成。当用户单击某个按钮时,会触发该命令: <button (click)="testWebAssembly()"&g

我已经编写了一个C函数,可以使用WebAssembly从Angular/TypeScript/JavaScript执行该函数:

testWebAssembly() {
    Module.ccall("aCFunction", null, [], []); // takes a few seconds to finish
}
此函数执行一些繁重的数学计算,需要几秒钟才能完成。当用户单击某个按钮时,会触发该命令:

<button (click)="testWebAssembly()">Launch C function</button>
启动C函数
是否可以执行该函数,使其不会阻塞web应用程序的UI

我尝试了
setTimeOut
/
async
/
Promise
,但我似乎无法让它工作


谢谢大家!

异步执行本身不会使它脱离主线程。你真正的意思是同时执行它。在Web上实现这一点的唯一方法是使用辅助线程。

WebAssembly和JavaScript共享同一个执行线程,即当您从JavaScript中执行WebAssembly时,JavaScript代码会停止,反之亦然。在这方面,它就像从JavaScript代码执行任何其他本机(即浏览器提供的)API一样

您可以选择在WebWorker中运行WebAssembly,使用
postMessage
向在不同线程中执行的wasm代码发送消息。这里有一个很好的例子,它使用WebWorkers渲染分形:

将来WebAssembly可能会有自己的线程支持:


您考虑过webworkers吗?请注意,即使使用threads方案,您也不能在Wasm本身中创建线程,而必须在JS端使用workers。您知道一个好的来源来解释Angular/TypeScript的web workers吗?我不知道网络工作者,也没有使用过他们。