Better solution for #471

This commit is contained in:
the-djmaze 2022-08-01 22:45:17 +02:00
parent 2c4bd445a5
commit 561445de03
2 changed files with 14 additions and 9 deletions

View file

@ -30,11 +30,11 @@ checkResponseError = data => {
oRequests = {}, oRequests = {},
abort = (sAction, bClearOnly) => { abort = (sAction, sReason, bClearOnly) => {
if (oRequests[sAction]) { if (oRequests[sAction]) {
if (!bClearOnly && oRequests[sAction].abort) { if (!bClearOnly && oRequests[sAction].abort) {
// oRequests[sAction].__aborted = true; // oRequests[sAction].__aborted = true;
oRequests[sAction].abort(); oRequests[sAction].abort(sReason || 'AbortError');
} }
oRequests[sAction] = null; oRequests[sAction] = null;
@ -54,11 +54,14 @@ fetchJSON = (action, sGetAdd, params, timeout, jsonCallback) => {
if (window.AbortController) { if (window.AbortController) {
abort(action); abort(action);
const controller = new AbortController(); const controller = new AbortController();
timeout && setTimeout(() => controller.abort(), timeout);
oRequests[action] = controller; oRequests[action] = controller;
init.signal = controller.signal; init.signal = controller.signal;
timeout && setTimeout(() => abort(action, 'TimeoutError'), timeout);
} }
return rl.fetchJSON(getURL(sGetAdd), init, sGetAdd ? null : params).then(jsonCallback); return rl.fetchJSON(getURL(sGetAdd), init, sGetAdd ? null : params).then(jsonCallback).catch(err => {
err.reason = init.signal.reason;
return Promise.reject(err);
});
}; };
class FetchError extends Error class FetchError extends Error
@ -72,7 +75,7 @@ class FetchError extends Error
export class AbstractFetchRemote export class AbstractFetchRemote
{ {
abort(sAction, bClearOnly) { abort(sAction, bClearOnly) {
abort(sAction, bClearOnly); abort(sAction, 0, bClearOnly);
return this; return this;
} }
@ -147,7 +150,7 @@ export class AbstractFetchRemote
if (oRequests[sAction].__aborted) { if (oRequests[sAction].__aborted) {
iError = 2; iError = 2;
} }
abort(sAction, true); abort(sAction, 0, true);
} }
if (!iError && data) { if (!iError && data) {
@ -174,7 +177,7 @@ export class AbstractFetchRemote
} }
) )
.catch(err => { .catch(err => {
console.error(err); console.error({fetchError:err});
fCallback && fCallback(err.name == 'AbortError' ? 2 : 1, err); fCallback && fCallback(err.name == 'AbortError' ? 2 : 1, err);
}); });
} }
@ -199,7 +202,7 @@ export class AbstractFetchRemote
this.setTrigger(fTrigger, true); this.setTrigger(fTrigger, true);
return fetchJSON(action, '', params, pInt(timeOut, 30000), return fetchJSON(action, '', params, pInt(timeOut, 30000),
data => { data => {
abort(action, true); abort(action, 0, true);
if (!data) { if (!data) {
return Promise.reject(new FetchError(Notification.JsonParse)); return Promise.reject(new FetchError(Notification.JsonParse));

View file

@ -171,8 +171,10 @@ MessagelistUserStore.reload = (bDropPagePosition = false, bDropCurrentFolderCach
if (iError) { if (iError) {
if (Notification.RequestAborted !== iError) { if (Notification.RequestAborted !== iError) {
MessagelistUserStore([]); MessagelistUserStore([]);
MessagelistUserStore.error(getNotification(iError));
} else if ('TimeoutError' === oData.reason) {
MessagelistUserStore.error(oData.reason);
} }
MessagelistUserStore.error(getNotification(iError) || oData.message);
} else { } else {
const collection = MessageCollectionModel.reviveFromJson(oData.Result, bCached); const collection = MessageCollectionModel.reviveFromJson(oData.Result, bCached);
if (collection) { if (collection) {