You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否构建可执行任意JavaScript函数并封装为Promise的WebWorker抽象层?

基于Web Worker封装Promise化任意函数执行层的问题

我希望在Web Worker API之上构建一层抽象层,实现以下两个核心目标:

  • 在Web Worker中执行任意函数
  • 将交互过程封装为Promise

期望的使用效果大致如下:

function bake() {
  ... // 耗时计算逻辑
  return 'mmmm, pizza'
}

async function handlePizzaButtonClick() {
  const pizza = await workIt(bake)
  eat(pizza)
}

(显然,给函数添加参数的扩展逻辑难度不大。)

我初步实现的workIt函数如下:

async function workIt<T>(f: () => T): Promise<T> {
  const worker: Worker = new Worker('./unicorn.js') // 暂未创建该worker文件
  worker.postMessage(f)
  return new Promise<T>((resolve, reject) => {
    worker.onmessage = ({data}: MessageEvent) => resolve(data)
    worker.onerror   = ({error}: ErrorEvent)  => reject(error)
  })
}

这个实现失败的核心原因是:函数不具备结构化克隆特性,因此无法通过Web Worker的消息机制传递。(Promise封装的部分逻辑是正常的。)

目前存在多种JavaScript函数序列化方案,但部分方案存在较高风险。不过在采用这类方案之前,我想确认:是否还有其他遗漏的方法?有没有其他方式可以利用Web Worker(或其他多线程执行环境)来运行任意JavaScript代码?

内容的提问来源于stack exchange,提问作者Sasgorilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:27:29