Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 随机服务工作者响应错误_Javascript_Google Chrome_Selenium_Service Worker - Fatal编程技术网

Javascript 随机服务工作者响应错误

Javascript 随机服务工作者响应错误,javascript,google-chrome,selenium,service-worker,Javascript,Google Chrome,Selenium,Service Worker,我正在使用Service Worker和Cache API缓存静态资源,但对REST API端点(未在SW中缓存)的随机http请求失败,我收到的唯一消息是xhr.statusText,带有textService Worker响应错误和响应代码500 我无法判断这个错误是否只发生在未被缓存的URL上。这两方面都没有足够的证据。这只发生在Chrome(50.0.2661.75-64b)上,在Firefox45上也可以 我无法手动复制它,因为它发生在硒测试中,而且似乎是随机的。此外,它发生在本地主机

我正在使用Service Worker和Cache API缓存静态资源,但对REST API端点(未在SW中缓存)的随机http请求失败,我收到的唯一消息是
xhr.statusText
,带有text
Service Worker响应错误和响应代码500

我无法判断这个错误是否只发生在未被缓存的URL上。这两方面都没有足够的证据。这只发生在Chrome(50.0.2661.75-64b)上,在Firefox45上也可以

我无法手动复制它,因为它发生在硒测试中,而且似乎是随机的。此外,它发生在本地主机上(在本地主机上,尽管使用纯http,软件仍应工作),但也发生在具有自签名证书的HTTPS域中,因此,软件甚至不应在该域中工作

Selenium测试经常刷新页面和关闭浏览器窗口,但我不知道这是否重要

你知道为什么会发生这种情况,或者如何获得更多信息吗

更新: 服务人员代码:

var VERSION = "sdlkhdfsdfu89q3473lja";
var CACHE_NAME = "cache" + VERSION;
var CACHE_PATTERN = /\.(js|html|css|png|gif|woff|ico)\?v=\S+?$/;

function fetchedFromNetwork(response, event) {
    var cacheCopy = response.clone();
    var url = event.request.url;
    if (url.indexOf("/api/") === -1 // must not be a REST API call
        && url.indexOf(VERSION) > -1 // only versioned requests
        && VERSION !== "$CACHE_VERSION"
        && CACHE_PATTERN.test(url)) { //
        caches.open(CACHE_NAME)
            .then(function add(cache) {
                cache.put(event.request, cacheCopy);
                });
    }
    return response;
}

function unableToResolve() {
    return new Response("Service Unavailable", {
        status: 503,
        statusText: "Service Unavailable",
        headers: new Headers({
            "Content-Type": "text/plain"
        })
    });
}

this.addEventListener("fetch", function (event) {
    // cache GET only
    if (event.request.method !== "GET") {
        return;
    }

    event.respondWith(
        caches.match(event.request)
        .then(function (cached) {
            if (cached) {
                return cached;
            } else {
                return fetch(event.request)
                        .then(function (response) {
                            return fetchedFromNetwork(response, event);
                        }, unableToResolve)
                        .catch(unableToResolve);
            }
        }, function () { // in case caches.match throws error, simply fetch the request from network and rather don't cache it this time
            return fetch(event.request);
        }));
});


this.addEventListener("activate", function (event) {
    event.waitUntil(
        caches.keys()
        .then(function (keys) {
            return Promise.all(
                    keys.filter(function (key) {
                        // Filter out caches not matching current versioned name
                        return !key.startsWith(CACHE_NAME);
                    })
                    .map(function (key) {
                        // remove obsolete caches
                        return caches.delete(key);
                    }));
        }));
});

有趣。如果有一些代码能够重现问题,那就太好了,即使它在一千次运行中只有一次失败。我已经添加了我正在使用的软件代码,如果我不知道问题出在哪里,就很难分享更多,所以很难隔离/创建最小设置。这条评论可能很有趣。你找到解决方案了吗?我也有同样的问题说不,我当时因为这个问题放弃了软件。昨天我发现了这个,也许遵循这些提示会有所帮助。老实说,我希望随着软件的成熟,这个问题会得到缓解