質問させてください。
下のようなコードを作成しまして、C クラスには外部から json データを取得するメソッドがあり、new A()
を実行したときに、そこで取得したデータを C クラスのプロパティに格納したいと思っております。
しかし下のコードだとfecth()
が原因のためか中身が空の状態になってしまいます。
javascript
1class A { 2 constructor() { 3 this.b = new B(); 4 } 5} 6 7class B { 8 constructor() { 9 this.c = new C(); 10 } 11} 12 13class C { 14 constructor() { 15 this.data = this.fetchData(); // ← ここのプロパティに取得したデータを入れたいです 16 console.log(this.data); // undefined 17 } 18 19 // json からデータを取得 20 fetchData() { 21 fetch('sample.json') 22 .then(res => { 23 return res.json(); 24 }) 25 } 26} 27 28const a = new A();
そこで下のように非同期処理が終わるのを待つためにawait
を使おうと思ったのですが、コンストラクターにはasync
が使えないらしく、エラーになってしまいます。
javascript
1async constructor() { 2 this.data = await this.fetchData(); 3}
こちらのページを参考に init()
を作ってみてもうまくいきませんでした・・・
javascript
1class C { 2 constructor() { 3 this.init(); 4 } 5 6 async init() { 7 this.data = await this.fetchData(); 8 console.log(this.data); 9 } 10 11 fetchData() { 12 fetch('sample.json') 13 .then(res => { 14 return res.json(); 15 }) 16 } 17}
もし解決方法をご存じの方がいらっしゃいましたらご教授いただけると助かります。
よろしくお願いいたします。
追記
gentaro様からのアドバイスをもとに修正しました。
javascript
1class A { 2 constructor(data) { 3 this.b = new B(data); 4 } 5 6 start() { 7 this.b.active(); 8 } 9} 10 11class B { 12 constructor(data) { 13 this.c = new C(data); 14 } 15 16 active() { 17 this.c.hoge(); 18 } 19} 20 21class C { 22 constructor(data) { 23 this.data = data; 24 console.log(this.data); 25 } 26 27 hoge() { 28 // このメソッドで取得したデータを使います 29 } 30} 31 32// json からデータを取得 33fetch('sample.json') 34 .then(res => { 35 return res.json(); 36 }) 37 .then(data => { 38 // Aクラスのインスタンスを生成 39 const a = new A(data); 40 41 // ゲームをスタート 42 a.start(); 43 });
回答2件
あなたの回答
tips
プレビュー