以下のようなことをしたいのですがうまく動作しません。
Javascript
1 loadElements() { 2 let elements = []; // ①returnしたい変数 3 this.db.elementsStore.each(ele => { // ②eachメソッドはPromiseを返す 4 // ③DBから取得した値をelementsに代入 5 elements.push(new Element( ele.id, ...コンストラクター呼出し)); 6 }).then( () => { 7 // ④確認の処理 8 for (let i= 0 ; i < elements.length; i++) { 9 console.log(elements[i]) 10 } 11 }); 12 return elements; // ⑤ 値を返す 13 }
関数内でデータベースから値を取得しeachメソッドで値を変数に格納。その後、変数をリターンする処理なのですが正常に動作しません。
eachメソッドはPromiseオブジェクトを返すことはわかっているのですが、elementsに値が入るまで待つにはどのように修正したら良いでしょうか? いろいろ試してみたのですが、正しく動作しませんでした。
情報不足などありましたら、適宜追記していきますので何卒よろしくお願いいたします。
回答を参考にした解決コード
Javascript
1 loadElements() { 2 // ①Promiseをreturn 3 return new Promise((resolve, reject) { 4 let elements = []; 5 this.db.elementsStore.each(ele => { 6 elements.push(new Element( ele.id, ...コンストラクター呼出し)); 7 }).then( () => { 8 for (let i= 0 ; i < elements.length; i++) { 9 console.log(elements[i]) 10 } 11 resolve(elements); // ② resolve関数呼出し 12 }); 13 }); 14 } 15 16 async getElements() { 17 // ③ awaitで同期待ち 18 const elements = await loadElements() 19 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/07 09:47