Skip to content

Commit 57180c8

Browse files
authored
fix: loader must not reset if successfully loaded (#106)
1 parent f2a5909 commit 57180c8

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

src/index.test.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,18 @@ test("script onerror should not reset retry mechanism with parallel loaders", as
213213
expect(console.log).toHaveBeenCalledTimes(loader.retries);
214214
});
215215

216+
test("loader should not reset retry mechanism if successfully loaded", () => {
217+
const loader = new Loader({ apiKey: "foo", retries: 0 });
218+
const deleteScript = jest.spyOn(loader, "deleteScript");
219+
220+
loader["done"] = true;
221+
expect(loader.load()).resolves.toBeUndefined();
222+
223+
expect(loader["done"]).toBeTruthy();
224+
expect(loader["loading"]).toBeFalsy();
225+
expect(deleteScript).toHaveBeenCalledTimes(0);
226+
});
227+
216228
test("singleton should be used", () => {
217229
const loader = new Loader({ apiKey: "foo" });
218230
const extraLoader = new Loader({ apiKey: "foo" });
@@ -231,23 +243,23 @@ test("singleton should throw with different options", () => {
231243

232244
test("loader should resolve immediately when successfully loaded", async () => {
233245
// use await/async pattern since the promise resolves without trigger
234-
const loader = new Loader({ apiKey: "foo" });
246+
const loader = new Loader({ apiKey: "foo", retries: 0 });
235247
loader["done"] = true;
236248

237249
await expect(loader.loadPromise()).resolves.toBeUndefined();
238250
});
239251

240252
test("loader should resolve immediately when failed loading", async () => {
241253
// use await/async pattern since the promise rejects without trigger
242-
const loader = new Loader({ apiKey: "foo" });
254+
const loader = new Loader({ apiKey: "foo", retries: 0 });
243255
loader["done"] = true;
244256
loader["onerrorEvent"] = document.createEvent("ErrorEvent");
245257

246258
await expect(loader.loadPromise()).rejects.toBeDefined();
247259
});
248260

249261
test("loader should wait if already loading", () => {
250-
const loader = new Loader({ apiKey: "foo" });
262+
const loader = new Loader({ apiKey: "foo", retries: 0 });
251263
loader["loading"] = true;
252264

253265
loader.load();

src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,8 @@ export class Loader {
427427
}
428428

429429
private resetIfRetryingFailed(): void {
430-
if (this.done && !this.loading && this.errors.length >= this.retries) {
430+
const possibleAttempts = this.retries + 1;
431+
if (this.done && !this.loading && this.errors.length >= possibleAttempts) {
431432
this.deleteScript();
432433
this.done = false;
433434
this.loading = false;

0 commit comments

Comments
 (0)