首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在服务工作线程中侦听'sync‘事件时未触发回调

在服务工作线程中侦听'sync‘事件时未触发回调
EN

Stack Overflow用户
提问于 2019-06-13 03:07:52
回答 1查看 37关注 0票数 0

我正在侦听服务工作者文件中的'sync'事件,但什么也没有发生。即使是我的console.log也不能启动

我确保在waitUntil()函数中返回了一个promise。

这是我的main.js文件的样子

代码语言:javascript
复制
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函数端点)

代码语言:javascript
复制
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)))
}

这是我的服务工作者文件

代码语言:javascript
复制
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”事件并触发回调。如果已有连接或已重新建立连接,则将请求发送到端点。

EN

回答 1

Stack Overflow用户

发布于 2019-06-14 03:23:08

原来我所要做的就是使用indexedDB

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56568883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档