在 ServiceWorker 中使用 setTimeout

Ach*_*him 3 javascript service-worker progressive-web-apps

在我的ServiceWorker我有以下代码:

function send_alert() {
    console.log('alert');
};


self.addEventListener('message', (evt) => {
    console.log("message:" + evt.data);
    self.setTimeout(1000*5, send_alert);
    console.log("done");
});
Run Code Online (Sandbox Code Playgroud)

如果单击主页中的按钮,则会向工作人员发送一条消息。这工作正常,我在控制台中看到message: ...done日志。该self.setTimeout调用不会引发错误,但从send_alert未被调用。

根据https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope实现的WindowTimers实现setTimeoutself应该是 的一个实例ServiceWorkerGlobalScope,所以我没有看到问题。setTimeout在服务工作者中使用的正确方法是什么?

Gol*_*den 5

假设self.setTimeout函数是普通setTimeout函数,那么参数的顺序是错误的:你首先必须提供回调,然后是毫秒数。

不幸的是,这与当今 JavaScript 中被视为事实上的标准背道而驰,但setTimeout已经很老了,所以......历史原因