【问题标题】:Sending datas from webworker to site context failing将数据从网络工作者发送到站点上下文失败
【发布时间】:2015-07-29 20:29:41
【问题描述】:

我正在尝试将数据从 webworker 传递到主上下文,但我无法使其工作。我的代码是:

alg.OnProcessEnd = (arg: { array: Uint32Array, max: number }) => {
    (<any>self).postMessage(arg, [arg.array]);
};

但 chrome 声称“TypeError:无法在 'WorkerGlobalScope' 上执行 'postMessage':索引 0 处的值没有可转移的类型。”

所以我的问题是:如何从无法复制的网络工作者正确发送数据(图像数据数组)。

【问题讨论】:

    标签: javascript typescript web-worker


    【解决方案1】:

    你需要先序列化Uint32Array,把它传过来,然后反序列化。

    一种方法是通过执行以下操作将其转换为 JSON 数组:

    var jsonArray = '[' + Array.prototype.join.apply(arg.array, [',']) + ']';
    

    然后您可以通过以下方式将其转移并重新创建Uint32Array 对象:

    var uint32Array = new Uint32Array( JSON.parse(jsonArray) );
    

    编辑:

    作为可转移对象:您缺少buffer 属性。

    (<any>self).postMessage(arg, [arg.array.buffer]);
    

    【讨论】:

    • 不应该通过可转移的对象来做到吗?
    【解决方案2】:

    第二个参数应该是缓冲区而不是数组本身

    alg.OnProcessEnd = (arg: { array: Uint32Array, max: number }) => {
        (<any>self).postMessage(arg, [arg.array.buffer]);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 2019-08-07
      • 2013-07-04
      相关资源
      最近更新 更多