summaryrefslogtreecommitdiff
path: root/ui/lib/retry.js
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-04-23 22:19:24 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-04-23 22:19:24 -0400
commit713afd0b4963460cc37b3767c6b542c8c828d227 (patch)
tree5156b6874cdd3cde684b4719d5e8fe1500b47612 /ui/lib/retry.js
parent1ebe642ebe7c9ba72eb1713ec21f0cd03949a47f (diff)
parent4d6cc62f0c9bb5d50720c83fb1ecbd0889d2acd3 (diff)
Retry boot every five seconds.
Merged in spite of misgivings. This method will loop over the request until it completes, even if the user moves to a view where the response is no longer relevant.
Diffstat (limited to 'ui/lib/retry.js')
-rw-r--r--ui/lib/retry.js21
1 files changed, 21 insertions, 0 deletions
diff --git a/ui/lib/retry.js b/ui/lib/retry.js
new file mode 100644
index 0000000..a2cff65
--- /dev/null
+++ b/ui/lib/retry.js
@@ -0,0 +1,21 @@
+export async function retry(callback, shouldRetry, delay) {
+ while (true) {
+ try {
+ return await callback();
+ } catch (err) {
+ if (shouldRetry(err)) {
+ await delay();
+ } else {
+ throw err;
+ }
+ }
+ }
+}
+
+export function timedDelay(millis) {
+ return async () => await sleep(millis);
+}
+
+function sleep(millis) {
+ return new Promise((resolve) => setTimeout(resolve, millis));
+}