_addSyncListener()

in workbox-v4.3.1/workbox-background-sync.dev.js [677:727]


    _addSyncListener() {
      if ('sync' in registration) {
        self.addEventListener('sync', event => {
          if (event.tag === `${TAG_PREFIX}:${this._name}`) {
            {
              logger_mjs.logger.log(`Background sync for tag '${event.tag}'` + `has been received`);
            }

            const syncComplete = async () => {
              this._syncInProgress = true;
              let syncError;

              try {
                await this._onSync({
                  queue: this
                });
              } catch (error) {
                syncError = error; // Rethrow the error. Note: the logic in the finally clause
                // will run before this gets rethrown.

                throw syncError;
              } finally {
                // New items may have been added to the queue during the sync,
                // so we need to register for a new sync if that's happened...
                // Unless there was an error during the sync, in which
                // case the browser will automatically retry later, as long
                // as `event.lastChance` is not true.
                if (this._requestsAddedDuringSync && !(syncError && !event.lastChance)) {
                  await this.registerSync();
                }

                this._syncInProgress = false;
                this._requestsAddedDuringSync = false;
              }
            };

            event.waitUntil(syncComplete());
          }
        });
      } else {
        {
          logger_mjs.logger.log(`Background sync replaying without background sync event`);
        } // If the browser doesn't support background sync, retry
        // every time the service worker starts up as a fallback.


        this._onSync({
          queue: this
        });
      }
    }