Javascript 在ServiceWorker中使用setTimeout

Javascript 在ServiceWorker中使用setTimeout,javascript,service-worker,progressive-web-apps,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"); }); 如果在主页中单击按钮,

在我的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");
});
如果在主页中单击按钮,则会向工作人员发送消息。这很好,我看到了这样的信息:。。。并在控制台中完成日志。self.setTimeout调用不会引发错误,但从未调用send_警报

根据实现setTimeout的实现WindowTimers。self应该是ServiceWorkerGlobalScope的一个实例,所以我看不出有什么问题。在服务工作者中使用setTimeout的正确方法是什么?

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


不幸的是,这与当今JavaScript中的事实标准背道而驰,但是setTimeout已经很老了,所以…历史原因是它应该可以工作,除非*5在Chrome上确实是>60或者在Firefox上是>30。我猜self是SW中的全局对象,但请尝试删除限定条件并重试。参数的顺序是错误的。首先是回调,然后是时间——反之亦然。那太尴尬了。谢谢,哥洛!不客气