2017-01-23 2 views
0

Нажатие кнопки Я успешно зарегистрировался на sync, и он запускает функциональность, описанную мной в service-worker. Если я не в сети - он ждет, когда браузер получит соединение, а затем он заработает.Служебный синхронизатор службы запускается только в первый раз

НО - при нажатии на кнопку в первый раз и все нормально - с тех пор, нажав на кнопку еще раз успешно регистрирует для sync, но sync событие в сервис-работник никогда не вызывает:

self.addEventListener('sync', function(event) { 
    console.log('EVENT in SYNC', event); 
} 

Я вижу консольную запись только в первый раз, когда я нажимаю кнопку. Я что-то упустил?

+0

Вы проверили https://jakearchibald.github.io/isserviceworkerready/demos/sync/ и подтвердили, что ваш код делает то же самое? Если это не поможет, можете ли вы отправить как соответствующие части вашей клиентской страницы, так и кода вашего рабочего сотрудника? –

+0

Ох ... Я исправил это ... и забыл написать решение ... извините. Пожалуйста, взгляните на ответ :) –

ответ

1

Я понял это ... ... и проблема была довольно хромой: обработчик sync в сервисном работнике возвращал обещание, но это обещание так и не было разрешено. Как только я добавил resolve() часть в обработчике, котор возвратили обещание - все это работало отлично.

PS: В демо Jake Archibald обработчик sync делал self.registration.showNotification, который возвращает обещание, и это обещание разрешается после уведомления. На других примерах они делают простой fetch, который также дает обещание, и это обещание решает успех. Но на моем примере - я потянул данные от indexedDB, а затем сделал fetch. Так что - просто обернуты все в

var p = new Promise(function(resolve, reject) { 
    // get data from indexedDB .. 
    fetch(...).then(function(response) { 
     return response; 
    }) 
    .then(function() { 
     // fetch was successful .. 
     resolve(); 
    }); 
}; 
return p; 

Таким образом, он работал правильно.

+0

Вы должны отметить свой ответ как правильный, если это ваше подходящее решение. Это дало мне правильный намек;) – goemic

+0

Я не могу голосовать за свой пост :) –

+0

Правильно, но вы можете отметить его как правильно ;-) – goemic

Смежные вопросы