mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Better solution for #471
This commit is contained in:
parent
2c4bd445a5
commit
561445de03
2 changed files with 14 additions and 9 deletions
|
|
@ -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));
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue