From f51e317d820aa516d3e6a67900a9ac2705266e71 Mon Sep 17 00:00:00 2001 From: Jelle De Loecker Date: Thu, 25 Jul 2024 21:06:58 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Don't=20report=20request=20cance?= =?UTF-8?q?llation=20errors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/client/scene.js | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/client/scene.js b/lib/client/scene.js index 60b7805..88509e5 100644 --- a/lib/client/scene.js +++ b/lib/client/scene.js @@ -332,6 +332,30 @@ Scene.setMethod(function fetch(href, options, callback) { return this.general_renderer.fetch(href, options, callback); }); +/** + * Is the given error a request cancellation? + * + * @author Jelle De Loecker + * @since 2.4.0 + * @version 2.4.0 + * + * @param {Error} err + * + * @return {boolean} + */ +function isRequestCancellationError(err) { + + if (!err) { + return false; + } + + if (err.status == 0 && err.number == 0) { + return true; + } + + return false; +} + /** * Browse to a link using AJAX. * The response will be an item this client needs to render. @@ -491,6 +515,7 @@ Scene.setMethod(function openUrl(href, options, callback) { } let error = new Error('Request has been cancelled'); + error.status = error.number = 0; pledge.reject(error); return false; @@ -3006,7 +3031,7 @@ Scene.setMethod(function detectDoubleClick(request, min_duration) { * * @author Jelle De Loecker * @since 2.0.0 - * @version 2.3.3 + * @version 2.4.0 * * @param {HTMLElement} element * @param {HTMLEvent} e @@ -3120,6 +3145,12 @@ Scene.setMethod(function onLinkClick(element, e) { } if (err) { + + // Ignore cancellations + if (isRequestCancellationError(err)) { + return; + } + if (typeof that.errorHandler == 'function') { that.errorHandler(err, {type: 'openUrl', options: options, url: href}); } else { @@ -3170,7 +3201,7 @@ Scene.setMethod(function markElementBusy(element, busy) { * * @author Jelle De Loecker * @since 2.0.0 - * @version 2.3.18 + * @version 2.4.0 * * @param {HTMLElement} form * @param {HTMLEvent} e @@ -3248,6 +3279,12 @@ Scene.setMethod(function onFormSubmit(form, e, options) { } if (err) { + + // Ignore cancellations + if (isRequestCancellationError(err)) { + return; + } + return console.error(err); }