Tengo un trabajador de servicio como este:
self.addEventListener('fetch', function (event) { event.respondWith(new Promise(function(resolve, reject) { // ... fetch(event.request).then(resolve).catch(reject); })); });No recuerdo dónde encontré este código, pero cuando uso el bloqueador de anuncios junto con 404, en la consola veo el seguimiento de la pila:
¿Hay alguna manera de deshacerse de ese rastro de pila? Solo necesito saber que la recuperación falló (ver el segundo mensaje de error).
El seguimiento de la pila proviene de la propiedad de la pila del objeto Error (o clase derivada) que se pasa al método de reject . Una solución es rechazar con una cadena:
catch( err=>reject(err.message)) Sin embargo, si desea obtener más información sobre la URL que no se pudo obtener, deberá incluirla en la información de event.request . Cómo incluirlo depende de si event.request es una cadena de URL, una URL o un objeto de Request u objeto con un stringifier. Sin información exacta, podría intentar algo como
catch( err=>reject("Fetch failed to fetch " + (request?.url || request )));Simplemente borre la propiedad de la stack :
const e = new Error('Uh oh'); console.log(e.name, e.message, e.stack); e.stack = ''; console.log(e.name, e.message, e.stack);Parece que la forma correcta es tragarse el error, la red parece obtener el error correcto que aparece en las pestañas Red y consola en Herramientas de desarrollo.
self.addEventListener('fetch', function (event) { var req = fetch(event.request).then(resolve).catch(() => {}); event.respondWith(req); });