我使用基于Chromium的Electron来创建离线桌面应用程序。
该应用程序使用远程站点,我们正在使用服务工作程序使站点的某些部分脱机。一切都很好,除了某种情况,我称之为飞机无线状况"。
使用Charles,我将下载带宽限制在100bytes / s。该连接通过webview.loadURL
发送,最终在Chromium中调用LoadURLWithParams
。问题是它没有失败然后激活服务工作者,就像根本没有连接那样。发送请求后,它会永远等待响应。
我的问题是,如何在一段时间后超时请求并从服务工作者加载所有内容,就像用户真正离线一样?
答案 0 :(得分:1)
自己编写此代码的另一种方法是使用sw-toolbox
库,它为服务工作者提供路由和运行时缓存策略,以及一些用于帮助处理这些高级用例的内置选项。特别是,您需要使用networkTimeoutSeconds
parameter来配置在回退到之前缓存的响应之前等待网络响应的时间。
您可以像以下一样使用它:
toolbox.router.get(
new RegExp('my-api\\.com'),
toolbox.networkFirst, {
networkTimeoutSeconds: 10
}
);
这将配置与GET
个请求匹配的路由与包含my-api.com
的网址,并应用网络优先策略,该策略将在10秒后自动回退到先前缓存的响应。