Skip to content

Commit 67117c1

Browse files
authored
Avoid function state in IndexedDB page wait (#580)
The DeletingAllItems step stored its resolver as a property on the iterationFinishedListener function object and registered a listener that was never removed. Replace it with a waitForPreviousPageLoaded() helper that registers a one-shot listener for each page transition, so the resolver is local to the navigation it belongs to and the listener cleans itself up. Follow-up to the review on #531.
1 parent 80d5f2d commit 67117c1

2 files changed

Lines changed: 16 additions & 16 deletions

File tree

suites-experimental/javascript-wc-indexeddb/dist/src/workload-test.mjs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ const deletePromise = new Promise((resolve) => {
2222
window.addEventListener(promisesEventsNames.delete, () => resolve());
2323
});
2424

25+
function waitForPreviousPageLoaded() {
26+
return new Promise((resolve) => {
27+
window.addEventListener("previous-page-loaded", resolve, { once: true });
28+
});
29+
}
30+
2531
const suites = {
2632
default: new BenchmarkSuite("indexeddb", [
2733
new BenchmarkStep(`Adding${numberOfItemsToAdd}Items`, async () => {
@@ -65,14 +71,7 @@ const suites = {
6571
new BenchmarkStep("DeletingAllItems", async () => {
6672
const numberOfItemsPerIteration = 10;
6773
const numberOfIterations = 10;
68-
function iterationFinishedListener() {
69-
iterationFinishedListener.promiseResolve();
70-
}
71-
window.addEventListener("previous-page-loaded", iterationFinishedListener);
7274
for (let j = 0; j < numberOfIterations; j++) {
73-
const iterationFinishedPromise = new Promise((resolve) => {
74-
iterationFinishedListener.promiseResolve = resolve;
75-
});
7675
const todoList = document.querySelector("todo-app").shadowRoot.querySelector("todo-list");
7776
const items = todoList.shadowRoot.querySelectorAll("todo-item");
7877
for (let i = numberOfItemsPerIteration - 1; i >= 0; i--) {
@@ -81,8 +80,9 @@ const suites = {
8180
}
8281
if (j < 9) {
8382
const previousPageButton = document.querySelector("todo-app").shadowRoot.querySelector("todo-bottombar").shadowRoot.querySelector(".previous-page-button");
83+
const previousPageLoadedPromise = waitForPreviousPageLoaded();
8484
previousPageButton.click();
85-
await iterationFinishedPromise;
85+
await previousPageLoadedPromise;
8686
}
8787
}
8888
}),

suites-experimental/javascript-wc-indexeddb/src/workload-test.mjs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ const deletePromise = new Promise((resolve) => {
2222
window.addEventListener(promisesEventsNames.delete, () => resolve());
2323
});
2424

25+
function waitForPreviousPageLoaded() {
26+
return new Promise((resolve) => {
27+
window.addEventListener("previous-page-loaded", resolve, { once: true });
28+
});
29+
}
30+
2531
const suites = {
2632
default: new BenchmarkSuite("indexeddb", [
2733
new BenchmarkStep(`Adding${numberOfItemsToAdd}Items`, async () => {
@@ -65,14 +71,7 @@ const suites = {
6571
new BenchmarkStep("DeletingAllItems", async () => {
6672
const numberOfItemsPerIteration = 10;
6773
const numberOfIterations = 10;
68-
function iterationFinishedListener() {
69-
iterationFinishedListener.promiseResolve();
70-
}
71-
window.addEventListener("previous-page-loaded", iterationFinishedListener);
7274
for (let j = 0; j < numberOfIterations; j++) {
73-
const iterationFinishedPromise = new Promise((resolve) => {
74-
iterationFinishedListener.promiseResolve = resolve;
75-
});
7675
const todoList = document.querySelector("todo-app").shadowRoot.querySelector("todo-list");
7776
const items = todoList.shadowRoot.querySelectorAll("todo-item");
7877
for (let i = numberOfItemsPerIteration - 1; i >= 0; i--) {
@@ -81,8 +80,9 @@ const suites = {
8180
}
8281
if (j < 9) {
8382
const previousPageButton = document.querySelector("todo-app").shadowRoot.querySelector("todo-bottombar").shadowRoot.querySelector(".previous-page-button");
83+
const previousPageLoadedPromise = waitForPreviousPageLoaded();
8484
previousPageButton.click();
85-
await iterationFinishedPromise;
85+
await previousPageLoadedPromise;
8686
}
8787
}
8888
}),

0 commit comments

Comments
 (0)