WASM/QuickJS - 从未输入来自 getQuickJS() 的回调?

问题描述 投票:0回答:1

我正在使用 quickjs-emscripten 尝试评估 Cloudflare Worker(即无服务器)中的一些 JS。我知道 JS 评估的陷阱,不需要在这里争论。

文档说这应该有效:

import { getQuickJS, shouldInterruptAfterDeadline } from "quickjs-emscripten"
getQuickJS().then((QuickJS) => {
    console.log('start'); //<-- never happens
    const result = QuickJS.evalCode("1 + 1", {
        shouldInterrupt: shouldInterruptAfterDeadline(Date.now() + 1000),
        memoryLimitBytes: 1024 * 1024,
    })
})

...但是回调永远不会输入,也不会抛出任何错误(尝试将其包装在 try-catch 中)。

有人知道可能出了什么问题吗?

webassembly emscripten cloudflare-workers quickjs
1个回答
0
投票

好吧,深入研究这个很有趣!

您正在寻找为 Emscripten 制作自定义 WASM 加载程序。

import { shouldInterruptAfterDeadline } from "quickjs-emscripten";

import type { QuickJSWASMModule } from "quickjs-emscripten";
import {
  newQuickJSWASMModule,
  DEBUG_SYNC as baseVariant,
  newVariant,
} from "quickjs-emscripten";
import cloudflareWasmModule from "./DEBUG_SYNC.wasm";
import cloudflareWasmModuleSourceMap from "./DEBUG_SYNC.wasm.map.txt";

const cloudflareVariant = newVariant(baseVariant, {
  wasmModule: cloudflareWasmModule,
  wasmSourceMapData: cloudflareWasmModuleSourceMap,
});

let QuickJS: QuickJSWASMModule | undefined;

然后在你的

addEventListener

QuickJS = await newQuickJSWASMModule(cloudflareVariant);

我在这里的一篇文章中介绍了我的研究。

© www.soinside.com 2019 - 2024. All rights reserved.