From 6f3461aec07f385bbb9d6da65f3823f4035013ce Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Wed, 13 Aug 2025 14:35:58 -0700 Subject: [PATCH] Convert IDB usage in Fetch.js to async. NFC --- src/Fetch.js | 55 ++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/src/Fetch.js b/src/Fetch.js index eb8567042ebae..03203d0f53af5 100644 --- a/src/Fetch.js +++ b/src/Fetch.js @@ -18,56 +18,55 @@ var Fetch = { // dbInstance: undefined, #if FETCH_SUPPORT_INDEXEDDB - // Be cautious that `onerror` may be run synchronously - openDatabase(dbname, dbversion, onsuccess, onerror) { - try { + async openDatabase(dbname, dbversion) { + return new Promise((resolve, reject) => { + try { #if FETCH_DEBUG - dbg(`fetch: indexedDB.open(dbname="${dbname}", dbversion="${dbversion}");`); + dbg(`fetch: indexedDB.open(dbname="${dbname}", dbversion="${dbversion}");`); #endif - var openRequest = indexedDB.open(dbname, dbversion); - } catch (e) { - return onerror(e); - } + var openRequest = indexedDB.open(dbname, dbversion); + } catch (e) { + return reject(e); + } - openRequest.onupgradeneeded = (event) => { + openRequest.onupgradeneeded = (event) => { #if FETCH_DEBUG - dbg('fetch: IndexedDB upgrade needed. Clearing database.'); + dbg('fetch: IndexedDB upgrade needed. Clearing database.'); #endif - var db = /** @type {IDBDatabase} */ (event.target.result); - if (db.objectStoreNames.contains('FILES')) { - db.deleteObjectStore('FILES'); - } - db.createObjectStore('FILES'); - }; - openRequest.onsuccess = (event) => onsuccess(event.target.result); - openRequest.onerror = onerror; + var db = /** @type {IDBDatabase} */ (event.target.result); + if (db.objectStoreNames.contains('FILES')) { + db.deleteObjectStore('FILES'); + } + db.createObjectStore('FILES'); + }; + openRequest.onsuccess = (event) => resolve(event.target.result); + openRequest.onerror = reject; + }); }, #endif - init() { + async init() { Fetch.xhrs = new HandleAllocator(); #if FETCH_SUPPORT_INDEXEDDB #if PTHREADS if (ENVIRONMENT_IS_PTHREAD) return; #endif - var onsuccess = (db) => { + + addRunDependency('library_fetch_init'); + try { + var db = await Fetch.openDatabase('emscripten_filesystem', 1); #if FETCH_DEBUG dbg('fetch: IndexedDB successfully opened.'); #endif Fetch.dbInstance = db; - removeRunDependency('library_fetch_init'); - }; - - var onerror = () => { + } catch (e) { #if FETCH_DEBUG dbg('fetch: IndexedDB open failed.'); #endif Fetch.dbInstance = false; + } finally { removeRunDependency('library_fetch_init'); - }; - - addRunDependency('library_fetch_init'); - Fetch.openDatabase('emscripten_filesystem', 1, onsuccess, onerror); + } #endif // ~FETCH_SUPPORT_INDEXEDDB } }