- From: James Burke <notifications@github.com>
- Date: Tue, 14 Apr 2015 10:39:40 -0700
- To: slightlyoff/ServiceWorker <ServiceWorker@noreply.github.com>
- Message-ID: <slightlyoff/ServiceWorker/issues/678/92992257@github.com>
For the [Mozilla email case](slightlyoff/BackgroundSync#70), I am hoping this sort of relationship would work:
```javascript
// in service worker that handles background sync notifications
self.onsync = function(event) {
if (event.registration.id === "periodicSync") {
event.waitUntil(new Promise(resolve, reject) {
// This worker connects to the email servers and syncs data to IDB.
var emailWorker = new SharedWorker("email-worker.js");
// Listen for a message from the worker to know when it is done
// with its sync work.
emailWorker.port.onmessage = function(e) {
var data = e.data;
if (data.type === 'syncComplete') {
// Shared worker complete. Resolve the waitUntil
// promise to allow this service worker to be
// shut down. If no other documents or workers
// have a reference to email-worker.js, then the
// shared worker would be shut down. If there
// are other documents/workers with a reference
// to email-worker.js would keep the shared worker
// alive.
resolve();
}
};
// Start communicating with the worker, ask it to sync.
// Wait to be messaged back to resolve the waitUntil
// promise.
emailWorker.port.start();
emailWorker.port.postMessage({
type: 'sync'
});
});
}
};
```
Just a sketch, things like errors not handled here, and in the email case, we could have multiple accounts on different sync intervals, so probably be a bit more complicated than this sketch, but I was hoping this sort of thing would be possible.
---
Reply to this email directly or view it on GitHub:
https://github.com/slightlyoff/ServiceWorker/issues/678#issuecomment-92992257
Received on Tuesday, 14 April 2015 17:40:11 UTC