mirror of
https://github.com/samuelthomas2774/nxapi.git
synced 2026-08-18 16:46:27 -05:00
Wait before retrying failed requests
This commit is contained in:
@@ -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;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user