mirror of
https://github.com/samuelthomas2774/nxapi.git
synced 2026-03-21 18:04:10 -05:00
Wait before retrying failed requests
This commit is contained in:
parent
cd6f614a99
commit
c7514a0635
|
|
@ -227,6 +227,7 @@ abstract class SplatNet3User {
|
|||
fest_vote_status: GraphQLSuccessResponse<DetailVotingStatusResult> | null = null;
|
||||
|
||||
promise = new Map<string, Promise<void>>();
|
||||
delay_retry_after_error_until: number | null = null;
|
||||
|
||||
updated = {
|
||||
friends: Date.now(),
|
||||
|
|
@ -235,6 +236,8 @@ abstract class SplatNet3User {
|
|||
current_fest: null as number | null,
|
||||
fest_vote_status: null as number | null,
|
||||
};
|
||||
|
||||
delay_retry_after_error = 5 * 1000; // 5 seconds
|
||||
update_interval = 10 * 1000; // 10 seconds
|
||||
update_interval_schedules = 60 * 60 * 1000; // 60 minutes
|
||||
update_interval_fest_voting_status: number | null = null; // 10 seconds
|
||||
|
|
@ -245,10 +248,16 @@ abstract class SplatNet3User {
|
|||
|
||||
protected async update(key: keyof SplatNet3User['updated'], callback: () => Promise<void>, ttl: number) {
|
||||
if (((this.updated[key] ?? 0) + ttl) < Date.now()) {
|
||||
const promise = this.promise.get(key) ?? callback.call(null).then(() => {
|
||||
const promise = this.promise.get(key) ?? Promise.resolve().then(() => {
|
||||
const delay_retry = (this.delay_retry_after_error_until ?? 0) - Date.now();
|
||||
|
||||
return delay_retry > 0 ? new Promise(rs => setTimeout(rs, delay_retry)) : null;
|
||||
}).then(() => callback.call(null)).then(() => {
|
||||
this.updated[key] = Date.now();
|
||||
this.delay_retry_after_error_until = null;
|
||||
this.promise.delete(key);
|
||||
}).catch(err => {
|
||||
this.delay_retry_after_error_until = Date.now() + this.delay_retry_after_error;
|
||||
this.promise.delete(key);
|
||||
throw err;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ export default class Coral {
|
|||
expires_at = Date.now() + (2 * 60 * 60 * 1000);
|
||||
|
||||
promise = new Map<string, Promise<void>>();
|
||||
delay_retry_after_error_until: number | null = null;
|
||||
|
||||
updated = {
|
||||
announcements: null as number | null,
|
||||
|
|
@ -29,6 +30,8 @@ export default class Coral {
|
|||
webservices: null as number | null,
|
||||
active_event: null as number | null,
|
||||
};
|
||||
|
||||
delay_retry_after_error = 5 * 1000; // 5 seconds
|
||||
update_interval = 10 * 1000; // 10 seconds
|
||||
update_interval_announcements = 30 * 60 * 1000; // 30 minutes
|
||||
|
||||
|
|
@ -50,10 +53,16 @@ export default class Coral {
|
|||
|
||||
private update(key: keyof Coral['updated'], callback: () => Promise<void>, ttl: number) {
|
||||
if (((this.updated[key] ?? 0) + ttl) < Date.now()) {
|
||||
const promise = this.promise.get(key) ?? Promise.resolve().then(() => callback.call(null)).then(() => {
|
||||
const promise = this.promise.get(key) ?? Promise.resolve().then(() => {
|
||||
const delay_retry = (this.delay_retry_after_error_until ?? 0) - Date.now();
|
||||
|
||||
return delay_retry > 0 ? new Promise(rs => setTimeout(rs, delay_retry)) : null;
|
||||
}).then(() => callback.call(null)).then(() => {
|
||||
this.updated[key] = Date.now();
|
||||
this.delay_retry_after_error_until = null;
|
||||
this.promise.delete(key);
|
||||
}).catch(err => {
|
||||
this.delay_retry_after_error_until = Date.now() + this.delay_retry_after_error;
|
||||
this.promise.delete(key);
|
||||
throw err;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ export class CoralUser<T extends CoralApiInterface = CoralApi> implements CoralU
|
|||
expires_at = Infinity;
|
||||
|
||||
promise = new Map<string, Promise<void>>();
|
||||
delay_retry_after_error_until: number | null = null;
|
||||
|
||||
updated = {
|
||||
announcements: Date.now(),
|
||||
|
|
@ -105,6 +106,8 @@ export class CoralUser<T extends CoralApiInterface = CoralApi> implements CoralU
|
|||
webservices: Date.now(),
|
||||
active_event: Date.now(),
|
||||
};
|
||||
|
||||
delay_retry_after_error = 5 * 1000; // 5 seconds
|
||||
update_interval = 10 * 1000; // 10 seconds
|
||||
update_interval_announcements = 30 * 60 * 1000; // 30 minutes
|
||||
|
||||
|
|
@ -121,10 +124,16 @@ export class CoralUser<T extends CoralApiInterface = CoralApi> implements CoralU
|
|||
|
||||
private async update(key: keyof CoralUser['updated'], callback: () => Promise<void>, ttl: number) {
|
||||
if ((this.updated[key] + ttl) < Date.now()) {
|
||||
const promise = this.promise.get(key) ?? callback.call(null).then(() => {
|
||||
const promise = this.promise.get(key) ?? Promise.resolve().then(() => {
|
||||
const delay_retry = (this.delay_retry_after_error_until ?? 0) - Date.now();
|
||||
|
||||
return delay_retry > 0 ? new Promise(rs => setTimeout(rs, delay_retry)) : null;
|
||||
}).then(() => callback.call(null)).then(() => {
|
||||
this.updated[key] = Date.now();
|
||||
this.delay_retry_after_error_until = null;
|
||||
this.promise.delete(key);
|
||||
}).catch(err => {
|
||||
this.delay_retry_after_error_until = Date.now() + this.delay_retry_after_error;
|
||||
this.promise.delete(key);
|
||||
throw err;
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user