【发布时间】:2023-03-10 21:47:01
【问题描述】:
假设我有一个 web worker _worker,我像这样附加一个监听器:
_worker.addEventListener('message', (event) => {
window["test"] = event.data||"foo"
});
假设我稍后有条件地在一个 promise 中附加另一个侦听器,如下所示:
if (window["test"] === undefined) {
_worker.addEventListener('message', (event) => {
window["test"] = event.data || "foo";
resolve(window["test"])
});
}
else {
resolve (window["test"]);
}
基本上,第一个侦听器的工作是将 window["test"] 设置为事件数据。 Promise 生成器检查 window["test"] 是否已经被第一个监听器设置;如果没有,我们附加另一个侦听器以在触发工作消息事件时解决承诺。
但是,如果当我们附加第二个监听器时,worker 已经触发了一个消息事件,而事件循环正在等待触发第一个监听器呢?第二个侦听器是否会包含在要通知该事件的侦听器列表中?
【问题讨论】:
标签: javascript asynchronous listener web-worker