JavaScript Interview Questions
  • JavaScript Interview Questions
  • Contact
  • Introduction
  • Question 1
  • Question 2
  • Question 3
  • Question 4
  • Question 5
  • Question 6
  • Question 7
  • Question 8
  • Question 9
  • Question 10
  • Question 11
  • Question 12
  • Question 13
  • Question 14
  • Question 15
  • Question 16
  • Question 17
  • Question 18
  • Question 19
  • Question 20
  • Question 21
  • Question 22
  • Question 23
  • Question 24
  • Question 25
  • Question 26
  • Question 27
  • Question 28
  • Question 29
  • Question 30
  • Question 31
  • Question 32
  • Question 33
  • Question 34
  • Question 35
  • Question 36
  • Question 37
  • Question 38
  • Question 39
  • Question 40
  • Question 41
  • Question 42
  • Question 43
  • Question 44
  • Question 45
  • Question 46
  • Question 47
  • Question 48
  • Question 49
  • Question 50
  • Question 51
  • Question 52
  • Question 53
  • Question 54
  • Question 55
  • Question 56
  • Question 57
  • Question 58
  • Question 59
  • Question 60
  • Question 61
  • Question 62
  • Question 63
  • Question 64
  • Question 65
  • Question 66
  • Question 67
  • Question 68
  • Question 69
  • Question 70
  • Question 71
  • Question 72
  • Question 73
  • Question 74
  • Question 75
  • Question 76
  • Question 77
  • Question 78
  • Question 79
  • Question 80
  • Question 81
  • Question 82
  • Question 83
  • Question 84
  • Question 85
  • Question 86
  • Question 87
  • Question 88
  • Question 89
  • Question 90
  • Question 91
  • Question 92
  • Question 93
  • Question 94
  • Question 95
  • Question 96
  • Question 97
  • Question 98
  • Question 99
  • Question 100
  • Epilogue
Powered by GitBook
On this page
  • Question
  • Answer

Question 69

Question

How would you implement a background sync strategy using service workers and the Background Sync API?

Answer

Combining Service Workers and the Background Sync API is a powerful way to ensure that your web application can handle tasks even when offline and synchronize them reliably when back online. Here's how you'd implement a background sync strategy:

1. Registering Your Service Worker:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => console.log('Service worker registered:', registration))
      .catch(error => console.log('Service worker registration failed:', error));
  });
}
  • Include your service-worker.js file in your HTML, ensuring it's accessible to the browser.

2. The Service Worker (service-worker.js):

self.addEventListener('install', (event) => {
  event.waitUntil(
    // ... Your existing cache setup from previous examples ...
  );
});

self.addEventListener('fetch', (event) => {
  // ... Existing fetch event handling ... 
});

self.addEventListener('sync', (event) => {
  if (event.tag === 'my-sync-tag') {
    console.log('Background sync for my-sync-tag');

    // Process your pending tasks here:
    const taskData = getPendingTasks(); // Replace with how you store your data

    for (const task of taskData) {
      try {
        // Send the task to your backend server or perform other actions
        sendTaskToServer(task); 
      } catch (error) {
        console.error('Error processing task:', error);
        // Handle errors gracefully, perhaps retrying later
      }
    }

    // After processing tasks, clear them from storage:
    clearPendingTasks();
  }
});
  • sync Event: This event is triggered by the navigator.sync() method when you need to perform background synchronization. The event.tag property identifies the specific sync operation.

3. Utilizing navigator.sync() in Your Web Page:

// Example: Save a user's form data even if offline
const form = document.querySelector('form');
form.addEventListener('submit', (event) => {
  event.preventDefault(); // Prevent normal form submission

  const formData = new FormData(form); 

  navigator.sync({ tag: 'my-sync-tag' }, () => {
    console.log('Sync registered successfully!');
    // Handle successful registration, e.g., show a confirmation message
  }, (error) => {
    console.error('Error registering sync:', error);
    // Handle registration errors appropriately 
  });

  // ... Perform other actions or redirect the user ...
});

Important Considerations:

  • Task Storage: Determine how you'll store pending tasks locally (e.g., IndexedDB, local storage) to persist them even when offline.

  • Error Handling: Implement robust error handling for your background sync operations. You might want to retry failed tasks or queue them for later attempts.

PreviousQuestion 68NextQuestion 70

Last updated 9 months ago