@@ -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
0 commit comments