IndexedDBを使って値を取り出すプログラムを書いています。
実行のイメージでは
1. 関数内でPromiseオブジェクトを作成。
2. Promiseの引数内にIndexDBの非同期処理、及びresolve(), reject()が登録。
3. await で指定した変数に"非同期処理"完了後に代入。
4. 代入した値を return。
なのですが、実際は return の値に Promiseオブジェクトが入って終了してしまいます。
コードに原因があると考えられますが、何が原因で非同期処理を待てないのかわかりません。
なお、ブラウザはGoogle Chromeを使用してデバッグしています。
以下にコードを記載します。何卒よろしくお願いいたします。
javascript
1 loadEvdNote: async function(evdGuid) { 2 // 1. Promiseオブジェクトの生成 3 const promise = new Promise(function(resolve, reject) { 4 let openRequest = indexedDB.open(DB_DEFINE.name, DB_DEFINE.version); 5 6 // 2-1. 非同期処理 7 openRequest.onupgradeneeded = function(event) { 8 console.log('[DB][ERROR]: loadEvdNote'); 9 reject(); // 2-2. rejectの登録 10 }; 11 12 // 2-1. 非同期処理 13 openRequest.onsuccess = function(event) { 14 let db = event.target.result; 15 let transaction = db.transaction(DB_DEFINE.envNoteStore, 'readonly'); 16 let store = transaction.objectStore(DB_DEFINE.envNoteStore); 17 let result = store.get(evdGuid); 18 19 if (result && result.target && result.target.result) { 20 let evdNote = result.target.result; 21 resolve(evdNote); // 2-2. resolveの登録 22 } else { 23 resolve(null); 24 } 25 } 26 }); 27 const evdNote = await promise; // 3. awaitで処理待ち 28 return evdNote; // 4. 値をreturn (実際の値はPromiseオブジェクト) 29 } 30
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/30 13:01