gpt4 book ai didi

javascript - 在网络 worker 上制作自定义事件

转载 作者:搜寻专家 更新时间:2023-11-01 04:29:46 25 4
gpt4 key购买 nike

我做了一个 webworker 并尝试添加一个名为 progress 的自定义事件,如下所示:

self.updateProgress = function(no){
let event = new CustomEvent(
'progress',
{
detail : {
description: "event from webworker to update progress",
timeofevent: new Date(),
eventcode: 15
},
bubbles: true,
cancelable: false,
data : no
});
self.console.log(self.dispatchEvent(event));
};

在父 JavaScript 上:

scope.worker.addEventListener('progress', (e) => { //cannot add custom events to worker yet
scope.progress = e.data;
});

问题是事件永远不会被触发,而且从我读到的内容来看,似乎消息和错误是唯一附加到工作对象的事件。是不是不能添加自定义事件?

最佳答案

您在主线程中设置了 worker.addEventListener('message', (e) => {}),但您没有在 worker 中设置 self.dispatchEvent。相反,您调用 self.postMessage(obj, []); 并由 worker 实现完成这项工作(在线程之间传递数据并触发事件)。

WebWorker 的原型(prototype)是 Chrome 中的 EventTarget,因此您可能可以将其用作创建它的事件目标。但是主线程中的 worker 和 worker 中的 self 不是同一个对象/作用域,所以你在不同的目标上调度事件和监听事件。

但是没有什么能阻止您使用标准的 self.postMessage 方式来跟踪加载进度。

关于javascript - 在网络 worker 上制作自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40022394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com