2015-10-15 3 views
6

я следующий код в моем работника службы:Видя, если запрос успешно внутри сервисного работника

self.addEventListener('fetch', function (event) { 
    var fetchPromise = fetch(event.request); 

    fetchPromise.then(function() { 
    // do something here 
    }); 

    event.respondWith(fetchPromise); 
}); 

Однако, это делают некоторые странные вещи в консоли Дев и, кажется, делает загрузку сценария асинхронно а не синхронно (что в этом контексте плохо).

Есть ли способ прослушать, когда запрос будет выполнен без вызова fetch(event.request) вручную?

Например:

// This doesn't work 
self.addEventListener('fetch', function (event) { 
    event.request.then(function() { 
    // do something here 
    }); 
}); 
+0

Что вы подразумеваете, скрипт загружается асинхронно? Что вы делаете на лицевой стороне? – philnash

+0

@philnash: Я думаю, что меня просто смутил водопад: http://i.imgur.com/S3eU293.png Я сделал это изменение, и воспринимаемое время загрузки сайта ускорилось на 35% (2.0s -> 1,3 с). Все еще не знаю почему. – callumacrae

ответ

3

Если вы хотите, чтобы убедиться, что вся ваша последовательность действий выполняется до того, как ответ возвращается на страницу, вы должны отвечать всем обещание цепи, а не только первоначальное обещание возвращен путем выборки.

self.addEventListener('fetch', function(event) { 
    event.respondWith(fetch(event.request).then(function(response) { 
    // The fetch() is complete and response is available now. 
    // response.ok will be true if the HTTP response code is 2xx 
    // Make sure you return response at the end! 
    return response; 
    }).catch(function(error) { 
    // This will be triggered if the initial fetch() fails, 
    // e.g. due to network connectivity. Or if you throw an exception 
    // elsewhere in your promise chain. 
    return error; 
    })); 
}); 
+0

Да, я не беспокоюсь об этом. Я буквально просто контролирую, не изменяя ничего, поэтому на самом деле это не имеет никакого значения. Благодаря :) – callumacrae