Я посмотрел на реализацию workbox и нашел следующий код:
class Queue {
...
constructor(name, {onSync, maxRetentionTime} = {}) {
...
this._onSync = onSync || this.replayRequests;
...
и далее вниз
_addSyncListener() {
if ('sync' in registration) {
self.addEventListener('sync', (event) => {
...
const syncComplete = async () => {
this._syncInProgress = true;
let syncError;
try {
await this._onSync({queue: this});
Так что, как оказалось, когда вы этого не делаете передать onSync
обратный вызов, по умолчанию будет звонить replayRequests
. Если вы сдали один, вы должны сделать это самостоятельно, например, так:
workbox.routing.registerRoute(
options => options.url.pathname.startsWith('/api/'),
new workbox.strategies.NetworkOnly({
plugins: [
new workbox.backgroundSync.Plugin('myQueueName', {
maxRetentionTime: 14 * 24 * 60,
onSync({ queue }) {
// !!! important call here !!!
queue.replayRequests();
showNotification('background sync ran.');
}
})]
}),
'POST'
);