当前位置: 首页 > 知识库问答 >
问题:

在ServiceWorker中使用setTimeout

姬实
2023-03-14

在我的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");
});

如果单击主页中的按钮,则会向工作人员发送消息。这很好,我看到消息:和完成记录在控制台中。自身。setTimeout调用不会引发错误,但从不调用send_alert。

根据https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope实现窗口计时器,它实现设置超时self应该是ServiceWorkerGlobalScope的一个实例,所以我看不出问题所在。在服务人员中使用setTimeout的正确方法是什么?


共有1个答案

缪兴腾
2023-03-14

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

不幸的是,这与当今JavaScript中被视为事实上的标准是违反直觉的,但是setTimeout已经很老了,所以...

 类似资料:
  • broccoli-serviceworker ServiceWorker generator for Broccoli and Ember.js. Derived from broccoli-manifest. For more details on ServiceWorker check out the following: ServiceWorker spec ServiceWorker Gi

  • <mip-install-serviceworker> 是实现离线可用的组件,帮助安装 Service Worker。 标题 内容 类型 通用 支持布局 N/S 所需脚本 https://c.mipcdn.com/static/v2/mip-install-serviceworker/mip-install-serviceworker.js 示例 基本用法 <mip-install-service

  • 我调用服务器数据通过使用ajax在index.html.它是完美的获取这些数据。现在,我正在和服务人员一起工作。我可以缓存所有的静态资产(图像,js,css),并在Chrome开发工具的应用程序选项卡中的缓存存储中检查这些缓存的资产。我可以在网络选项卡中看到这些资产也被缓存(磁盘缓存)。 现在,我想使用ServiceWorker缓存这些ajax响应(图像文件数组)。在“网络”选项卡中,我可以看到它

  • 我想创建一个网站,即使当它的服务器离线时也可以工作——我发现这就是服务工人的目的。 当我重新加载带有service worker且没有连接的页面时,它工作正常。但是,轮班重新加载(例如,绕过缓存)会解除服务工作人员的防护,并出现“无法连接到服务器”错误。 我的问题是-我是否可以以某种方式防止轮班重新加载(shift f5、ctrl f5等)破坏服务人员,或者至少在不恢复连接的情况下使其恢复?

  • 我正在使用Firebase云消息服务辅助角色处理后台推送通知。 当通知(其中包含一些数据的URL)被点击,我想要么: 焦点窗口,如果它已经在所需的URL 导航到URL并聚焦它,如果已经有一个活动的选项卡打开 如果上述条件都不满足,则打开URL的新窗口 点1和3与下面的SW代码一起工作。 出于某种原因,第2点不起作用。promise被拒绝,原因是: 我认为这可能是由于缺少https,但从我的阅读来看

  • 我有一个网站,我不想让人们创建帐户。它是一个新闻源,每篇新闻文章都进行了分类。我想允许人们标记他们感兴趣的类别,以便下次他们访问该网站时,它只显示标记的类别的新闻。 我正在将标签保存在indexedDB中,我知道它在Service Worker中可用。 因此,在我的服务人员中,我希望“拦截”对< code>www.my-url.com的请求,检查indexDB以了解此人对哪些类别感兴趣,并添加一些