Call Back не срабатывает при прослушивании события 'sync' в сервисном работнике - PullRequest
0 голосов
/ 12 июня 2019

Я слушаю событие 'sync' в моем файле рабочего сервиса, но НИЧЕГО не происходит. Даже мой console.log не стреляет

Я гарантирую, что вернул обещание в функции waitUntil().

так выглядит мой файл main.js

finalOrder.addEventListener('submit', function(event) {
    event.preventDefault();
    var body = domArrayToObject(event.target)
    showForm();
    if ('serviceWorker' in navigator && 'SyncManager' in window) {
        (navigator.serviceWorker.ready
        .then(worker => {
            return worker.sync.register('write-req')
            .then(function(s){
                localStorage.setItem('req', JSON.stringify(body));
            }).catch(err => console.log(err))
        }).catch(err => console.log(err)))
    } else {
        sendMails(body);
    }
})

это моя функция sendMails (urlstring является конечной точкой функции firebase)

function sendMails(body) {
     return (Promise.all([fetch('urlstring', {
        method: 'POST',
        body: JSON.stringify(body),
        headers:{
            'Content-Type': 'application/json'
        }
    })
    .then(res => res.json())
    .then(response => console.log(res))
    .catch(err => console.log(err)),
    fetch('urlstring', {
        method: 'POST',
        body: JSON.stringify(body),
        headers:{
            'Content-Type': 'application/json'
        }
    })
    .then(res => res.json())
    .then(response => console.log(res))
    .catch(err => console.log(err))]).catch(err => console.log(err)))
}

это мой рабочий файл сервиса

self.addEventListener('sync', ev => {
    console.log('[Yaay Internet Connection]', ev)
    if (ev.tag == 'write-req') {
        console.log('[Service Worker] Syncing new Posts');
        var body = localStorage.getItem('req');
        ev.waitUntil(sendMails(body)
        .then((res) => {
            self.registration.showNotification('Order has been placed!!!', 
            {
                body: 'Your Order has been placed. You will hear from us soon',
                image: '',
                icon: '',
                badge: '',
                actions: [
                    { action: 'add', title: 'add', icon: ''}
                ]
            })
        }));
    }
})

Я хочу прослушать событие 'sync' и запустить обратный вызов. Отправка запроса в конечную точку, если соединение уже установлено или установлено повторно.

1 Ответ

0 голосов
/ 13 июня 2019

Оказывается, все, что мне нужно было сделать, это использовать indexedDB

...