Solve potential race conditions in dumpStore()
This commit is contained in:
parent
926f41d270
commit
10589b056f
@ -341,23 +341,25 @@ export class Database {
|
|||||||
const store = tx.objectStore(storeName);
|
const store = tx.objectStore(storeName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Wait for both getAllKeys() and getAll() to resolve
|
return new Promise((resolve, reject) => {
|
||||||
const [keys, values] = await Promise.all([
|
const result: Record<string, any> = {};
|
||||||
new Promise<any[]>((resolve, reject) => {
|
const cursor = store.openCursor();
|
||||||
const request = store.getAllKeys();
|
|
||||||
request.onsuccess = () => resolve(request.result);
|
|
||||||
request.onerror = () => reject(request.error);
|
|
||||||
}),
|
|
||||||
new Promise<any[]>((resolve, reject) => {
|
|
||||||
const request = store.getAll();
|
|
||||||
request.onsuccess = () => resolve(request.result);
|
|
||||||
request.onerror = () => reject(request.error);
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Combine keys and values into an object
|
cursor.onsuccess = (event) => {
|
||||||
const result: Record<string, any> = Object.fromEntries(keys.map((key, index) => [key, values[index]]));
|
const request = event.target as IDBRequest<IDBCursorWithValue | null>;
|
||||||
return result;
|
const cursor = request.result;
|
||||||
|
if (cursor) {
|
||||||
|
result[cursor.key as string] = cursor.value;
|
||||||
|
cursor.continue();
|
||||||
|
} else {
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor.onerror = () => {
|
||||||
|
reject(cursor.error);
|
||||||
|
};
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching data from IndexedDB:', error);
|
console.error('Error fetching data from IndexedDB:', error);
|
||||||
throw error;
|
throw error;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user