teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

回答コードを記載しました

2019/05/07 09:41

投稿

TosuTosu
TosuTosu

スコア49

title CHANGED
File without changes
body CHANGED
@@ -18,4 +18,28 @@
18
18
 
19
19
  **関数内でデータベースから値を取得しeachメソッドで値を変数に格納。その後、変数をリターンする処理なのですが正常に動作しません。**
20
20
  eachメソッドはPromiseオブジェクトを返すことはわかっているのですが、elementsに値が入るまで待つにはどのように修正したら良いでしょうか? いろいろ試してみたのですが、正しく動作しませんでした。
21
- 情報不足などありましたら、適宜追記していきますので何卒よろしくお願いいたします。
21
+ 情報不足などありましたら、適宜追記していきますので何卒よろしくお願いいたします。
22
+
23
+
24
+ # 回答を参考にした解決コード
25
+ ```Javascript
26
+ loadElements() {
27
+ // ①Promiseをreturn
28
+ return new Promise((resolve, reject) {
29
+ let elements = [];
30
+ this.db.elementsStore.each(ele => {
31
+ elements.push(new Element( ele.id, ...コンストラクター呼出し));
32
+ }).then( () => {
33
+ for (let i= 0 ; i < elements.length; i++) {
34
+ console.log(elements[i])
35
+ }
36
+ resolve(elements); // ② resolve関数呼出し
37
+ });
38
+ });
39
+ }
40
+
41
+ async getElements() {
42
+ // ③ awaitで同期待ち
43
+ const elements = await loadElements()
44
+ }
45
+ ```