Skip to content

Commit ddfac41

Browse files
Remove unnecesary asyncs, use transaction commit and oncompleted in the indexedDB version
1 parent c190603 commit ddfac41

File tree

4 files changed

+128
-157
lines changed

4 files changed

+128
-157
lines changed

experimental/javascript-wc-indexeddb/dist/storage/dexieDB-manager.js

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,30 +67,33 @@ class DexieDBManager {
6767
return items.reverse();
6868
}
6969

70-
async toggleTodo(itemNumber, completed) {
70+
toggleTodo(itemNumber, completed) {
7171
// Ensure the database connection is established
72-
if (!this.db) {
73-
await this.initDB();
74-
return this.toggleTodo(itemNumber, completed);
75-
}
76-
77-
// Get the todo item
78-
const todoItem = await this.db.todos.get(itemNumber);
79-
80-
if (!todoItem)
81-
throw new Error(`Todo item with itemNumber '${itemNumber}' not found`);
82-
83-
// Update the completed status
84-
todoItem.completed = completed;
72+
if (!this.db)
73+
throw new Error("Database connection is not established");
8574

86-
// Save the updated item back to the database
87-
await this.db.todos.put(todoItem);
8875
this.pendingToggles++;
8976

90-
if (--this.pendingToggles === 0)
91-
window.dispatchEvent(new CustomEvent("indexeddb-toggle-completed", {}));
77+
// Get the todo item and update it
78+
this.db.todos
79+
.get(itemNumber)
80+
.then((todoItem) => {
81+
if (!todoItem)
82+
throw new Error(`Todo item with itemNumber '${itemNumber}' not found`);
83+
84+
// Update the completed status
85+
todoItem.completed = completed;
9286

93-
return todoItem;
87+
// Save the updated item back to the database
88+
return this.db.todos.put(todoItem);
89+
})
90+
.then(() => {
91+
if (--this.pendingToggles === 0)
92+
window.dispatchEvent(new CustomEvent("indexeddb-toggle-completed", {}));
93+
})
94+
.catch((error) => {
95+
throw error;
96+
});
9497
}
9598

9699
removeTodo(itemNumber) {

experimental/javascript-wc-indexeddb/dist/storage/indexedDB-manager.js

Lines changed: 42 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,21 @@ class IndexedDBManager {
6767
const transaction = this.db.transaction(this.storeName, "readwrite");
6868
const store = transaction.objectStore(this.storeName);
6969

70-
const request = store.add(todo);
70+
store.add(todo);
7171
this.pendingAdditions++;
7272

73-
request.onsuccess = () => {
73+
transaction.oncomplete = () => {
7474
// When running in Speedometer, the event will be dispatched only once
7575
// because all the additions are done in a tight loop.
7676
if (--this.pendingAdditions === 0)
7777
window.dispatchEvent(new CustomEvent("indexeddb-add-completed", {}));
7878
};
7979

80-
request.onerror = (event) => {
80+
transaction.onerror = (event) => {
8181
throw event.target.error;
8282
};
83+
84+
transaction.commit();
8385
}
8486

8587
async getTodos(upperItemNumber, count) {
@@ -112,78 +114,62 @@ class IndexedDBManager {
112114
// We're done - sort items by itemNumber in descending order
113115
// for proper display order (newest to oldest)
114116
items.sort((a, b) => a.itemNumber - b.itemNumber);
115-
116117
resolve(items);
117118
}
118119
};
119120

120-
request.onerror = (event) => {
121-
reject(event.target.error);
122-
};
123-
124-
// Also handle transaction errors
125121
transaction.onerror = (event) => {
126122
reject(event.target.error);
127123
};
124+
128125
});
129126
}
130127

131-
async toggleTodo(itemNumber, completed) {
128+
toggleTodo(itemNumber, completed) {
132129
// Ensure the database connection is established
133-
if (!this.db) {
134-
await this.initDB();
135-
return this.toggleTodo(itemNumber, completed);
136-
}
137-
138-
return new Promise((resolve, reject) => {
139-
// Access the todo item directly by its itemNumber (keyPath)
140-
const transaction = this.db.transaction(this.storeName, "readwrite");
141-
const store = transaction.objectStore(this.storeName);
142-
143-
// Get the todo item directly using its primary key (itemNumber)
144-
const getRequest = store.get(itemNumber);
130+
if (!this.db)
131+
throw new Error("Database connection is not established");
145132

146-
getRequest.onsuccess = (event) => {
147-
const todoItem = getRequest.result;
133+
// Access the todo item directly by its itemNumber (keyPath)
134+
const transaction = this.db.transaction(this.storeName, "readwrite");
135+
const store = transaction.objectStore(this.storeName);
148136

149-
if (!todoItem) {
150-
reject(new Error(`Todo item with itemNumber '${itemNumber}' not found`));
151-
return;
152-
}
137+
// Get the todo item directly using its primary key (itemNumber)
138+
const getRequest = store.get(itemNumber);
153139

154-
// Update the completed status
155-
todoItem.completed = completed;
156-
this.pendingToggles++;
140+
this.pendingToggles++;
157141

158-
// Save the updated item back to the database
159-
const updateRequest = store.put(todoItem);
142+
getRequest.onsuccess = (event) => {
143+
const todoItem = getRequest.result;
160144

161-
updateRequest.onsuccess = () => {
162-
if (--this.pendingToggles === 0)
163-
window.dispatchEvent(new CustomEvent("indexeddb-toggle-completed", {}));
145+
if (!todoItem)
146+
throw new Error(`Todo item with itemNumber '${itemNumber}' not found`);
164147

165-
resolve(todoItem);
166-
};
148+
// Update the completed status
149+
todoItem.completed = completed;
150+
// Save the updated item back to the database
151+
const updateRequest = store.put(todoItem);
167152

168-
updateRequest.onerror = (event) => {
169-
reject(event.target.error);
170-
};
153+
updateRequest.onerror = (event) => {
154+
throw event.target.error;
171155
};
172156

173-
getRequest.onerror = (event) => {
174-
reject(event.target.error);
175-
};
157+
transaction.commit();
158+
};
176159

177-
// Handle potential errors in finding the item
178-
transaction.onerror = (event) => {
179-
reject(event.target.error);
180-
};
160+
getRequest.onerror = (event) => {
161+
throw event.target.error;
162+
};
181163

182-
// Handle transaction errors
183-
transaction.onerror = (event) => {
184-
reject(event.target.error);
185-
};
186-
});
164+
transaction.oncomplete = () => {
165+
if (--this.pendingToggles === 0)
166+
window.dispatchEvent(new CustomEvent("indexeddb-toggle-completed", {}));
167+
};
168+
169+
// Handle transaction errors
170+
transaction.onerror = (event) => {
171+
throw event.target.error;
172+
};
187173
}
188174

189175
removeTodo(itemNumber) {
@@ -199,19 +185,16 @@ class IndexedDBManager {
199185
const deleteRequest = store.delete(itemNumber);
200186
this.pendingDeletions++;
201187

202-
deleteRequest.onsuccess = () => {
188+
transaction.oncomplete = () => {
203189
if (--this.pendingDeletions === 0)
204190
window.dispatchEvent(new CustomEvent("indexeddb-remove-completed", {}));
205191
};
206192

207-
deleteRequest.onerror = (event) => {
208-
throw event.target.error;
209-
};
210-
211-
// Handle transaction errors
212193
transaction.onerror = (event) => {
213194
throw event.target.error;
214195
};
196+
197+
transaction.commit();
215198
}
216199
}
217200

experimental/javascript-wc-indexeddb/src/storage/dexieDB-manager.js

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,30 +67,33 @@ class DexieDBManager {
6767
return items.reverse();
6868
}
6969

70-
async toggleTodo(itemNumber, completed) {
70+
toggleTodo(itemNumber, completed) {
7171
// Ensure the database connection is established
72-
if (!this.db) {
73-
await this.initDB();
74-
return this.toggleTodo(itemNumber, completed);
75-
}
76-
77-
// Get the todo item
78-
const todoItem = await this.db.todos.get(itemNumber);
79-
80-
if (!todoItem)
81-
throw new Error(`Todo item with itemNumber '${itemNumber}' not found`);
82-
83-
// Update the completed status
84-
todoItem.completed = completed;
72+
if (!this.db)
73+
throw new Error("Database connection is not established");
8574

86-
// Save the updated item back to the database
87-
await this.db.todos.put(todoItem);
8875
this.pendingToggles++;
8976

90-
if (--this.pendingToggles === 0)
91-
window.dispatchEvent(new CustomEvent("indexeddb-toggle-completed", {}));
77+
// Get the todo item and update it
78+
this.db.todos
79+
.get(itemNumber)
80+
.then((todoItem) => {
81+
if (!todoItem)
82+
throw new Error(`Todo item with itemNumber '${itemNumber}' not found`);
83+
84+
// Update the completed status
85+
todoItem.completed = completed;
9286

93-
return todoItem;
87+
// Save the updated item back to the database
88+
return this.db.todos.put(todoItem);
89+
})
90+
.then(() => {
91+
if (--this.pendingToggles === 0)
92+
window.dispatchEvent(new CustomEvent("indexeddb-toggle-completed", {}));
93+
})
94+
.catch((error) => {
95+
throw error;
96+
});
9497
}
9598

9699
removeTodo(itemNumber) {

0 commit comments

Comments
 (0)