我做了一个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对象的唯一事件。是否无法添加自定义事件?
答案 0 :(得分:2)
您在主线程中设置了worker.addEventListener('message', (e) => {})
,但在工作时没有self.dispatchEvent
。相反,您调用self.postMessage(obj, []);
并且worker实现完成工作(在线程和触发事件之间传递数据)。
Chrome中的WebWorker
原型为EventTarget
,因此您可以将其用作创建它的事件目标。但是主线程中的worker
和worker中的self
不是同一个对象/范围,因此您可以在不同的目标上调度事件和侦听事件。
但没有什么能阻止您使用标准self.postMessage
方式来跟踪加载进度。