質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

1381閲覧

javascript 非同期処理について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/09/27 15:35

編集2020/09/27 16:12

sample()のjsoninfoにデータを入れたいのですが、loadJson()の箇所でjsonに値が入る前にreturnされてしまうので、jsonInfoに値が入っていない状況です。

処理が終わってからreturnされるのが理想なんですが、どう記述すればいいか教えて頂きたいです。

非同期処理についてasync/awaitの使い方が分かっておらず、、、

javascript

1 function info(obj){ 2 var location = obj.sample1.value.id; 3 var user = obj.sample1.value.user; 4 return { 5 "location": location, 6 "user" : user 7 } 8 } 9 10 function loadJson() { 11 var json; 12 $.getJSON("data.json", function(data) { 13 var obj = data[0]; 14 json = info(obj); 15 console.log(json); //値が入っている、2番目に表示される 16 }); 17 console.log(json); //undefined、1番目に表示される 18 return json; 19 } 20 21 function sample(){ 22 var jsonInfo = loadJson(); 23 }

json

1[ 2    { 3        "id": "1232", 4        "template": { 5            "value": "タイトル" 6        }, 7        "sample1": { 8            "value": { 9                "user": { 10                    "value": 50 11                }, 12                "id": { 13                    "value": 1231 14                } 15            } 16        } 17    } 18]

async/awaitを使ったもの

javascript

1 2 async function loadJson() { 3 var json; 4 $.getJSON("data.json", function(data) { 5 var obj = data[0]; 6 json = await info(obj); 7 console.log(json); //値が入っている 8 }); 9 console.log(json); //undefined 10 return json; 11 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/09/27 15:52

実際のjsonデータはありませんか?
退会済みユーザー

退会済みユーザー

2020/09/27 16:12

すいません、編集しました。
Zuishin

2020/09/28 22:37 編集

ここでの問題点は、$_.getJSON が非同期処理をしているため、それが終わる前に console.log(json) が呼ばれていて、json にはまだデータが入っていないということです。getJSON が終わるまで待機しなければいけません。 https://stackoverflow.com/questions/42675535/how-to-make-the-getjson-wait-before-running-the-rest-of-the-code このベストアンサーの二番目のコードのように getJSON を呼び出す処理を関数に独立させ、Promise を返し、それを await すると良いでしょう。 ただし await するためには呼び出し側も非同期関数である必要があります。 async function sample(){ var jsonInfo = await loadJson(); }
guest

回答2

0

非同期処理についてasync/awaitの使い方が分かっておらず、、、

async/await を知るには、次の順で理解できているかを再確認してみてください

  1. コールバック ... MDN コールバック関数
  2. Promise ... MDN Promiseを使う
  3. async/await ... Promise の糖衣構文(シンタックスシュガー)

JavaScript の情報伝搬の基本は、関数の返り値をそのまま使う以外に、コールバック関数が頻繁に利用されます。
コールバック関数はネストが深くなるとコードが読みづらくなるので、フロー制御の手法として Promise が実装されています。

投稿2020/09/28 21:07

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

具体的なデータが無いのでなんとも言えませんが、こんな感じですかね

javascript

1const info=(obj)=>{ 2 const location = obj.sample1.value.id; 3 const user = obj.sample1.value.user; 4 return { location,user}; 5} 6 7const loadJson=async()=>{ 8 const data=await fetch("x.json").then(res=>res.json()); 9 return info(data[0]); 10} 11 12const sample=async()=>{ 13 var jsonInfo = await loadJson(); 14 console.log(jsonInfo); 15} 16sample();

投稿2020/09/27 16:00

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問