I am facing one weird issue while working with indexedDB. Whenever I install another extension, sometimes indexedDB takes so much of time to write the data into db. I tried to fix this issue by using indexedDB API and a library based on indexedDB but nothing seems to work.
Here is the code I am using
function updateRecord({
sessionId,
...record
}) {
return new Promise(async(resolve, reject) => {
try {
console.log(
'%c Inside update record ',
'background: #222; color: #bada55'
);
const dbPromise = await idb.openDB('testbuddyExtension', 1, {
upgrade(db) {
const store = db.createObjectStore('testbuddy', {
keyPath: 'sessionId',
});
store.createIndex('keyIndex', 'tabId');
},
});
const existingRecord = await dbPromise.get('testbuddy', sessionId);
const updatedPayload = {
...record,
...(existingRecord ? existingRecord : {}),
};
await dbPromise.put('testbuddy', { ...updatedPayload,
sessionId
});
console.log(
'%c Everything is now done! ',
'background: #222; color: #bada55'
);
resolve(true);
} catch (error) {
console.log('%c Error found! ', 'background: #222; color: #bada55');
console.log({
error
});
reject(false);
}
});
}
And here is a video that might help you understand. Also, it is not the case that it is slowing down because I am writing a whole lot of data at once. I have used the same script to write down megabytes of data at once.
This issue is resolved now. As you can see in the video, when I enabled another extension, my extension raised some errors. And that was because I was running some script whenever the extension is enabled. And I forgot to mention the extension id.
chrome.management.onEnabled.addListener(() => {
//This code was running whenever any extension is installed
destroyDatabase().catch((error) => {
console.error('Failed to delete database', error);
});
reExecuteScript();
});
And this is how it should be done.
chrome.management.onEnabled.addListener((data) => {
if (data.id === chrome.runtime.id) {
destroyDatabase().catch((error) => {
console.error('Failed to delete database', error);
});
reExecuteScript();
}
});