2017-01-23 1 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() 부분을 추가하면 약속이 반환됩니다. 모두 정상적으로 작동합니다.

추 신 : 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

관련 문제