回答編集履歴

2

Promise周りの説明文を追記

2019/01/23 03:14

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -5,6 +5,12 @@
5
5
  質問文の書き方では非同期を上手く処理出来ないので`.then()`で包むというのもちゃんと参考するか、
6
6
 
7
7
  もっとJavaScriptの事を勉強して非同期処理をどう処理するのか覚えましょう。
8
+
9
+
10
+
11
+ ちなみに`.then(関数)`を使った非同期処理を実現する機能をPromiseと呼びます。
12
+
13
+ [https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)
8
14
 
9
15
 
10
16
 
@@ -22,19 +28,23 @@
22
28
 
23
29
  このコールバック関数は全然別の世界に受け渡されて、
24
30
 
25
- 実行しても良いタイミング(Ajax通信を行い、数秒後結果が帰ってきたら)によく分からない場所で実行されます。
31
+ 実行しても良いタイミング(Ajax通信を行い、結果が帰ってくる)によく分からない場所で実行されます。
26
32
 
27
33
  つまり、この世界の外にはもう帰ってこれません。
28
34
 
29
35
 
30
36
 
31
- の辺がコールバック地獄というコールバック関数やりたい事が増えると、
37
+ コールバック地獄呼ばれる地獄の入り口す。
32
38
 
33
- 延々とコードがネストて超読みづらいクソコードにる地獄の入口で、解消するテクニックは色々とありますが割愛
39
+ コールバック関数内でやりたい事が増えると、延々とコールバック関数内のコードが肥大し読みづらなります。
34
40
 
35
- 必要に応じ調べて見て下さい
41
+ 読めないコードは修正や改善も不可能で、現場では数多くの悲劇を生み出しきました
36
42
 
43
+
44
+
37
- 「コールバック地獄」で調べれば出てます。
45
+ 「コールバック地獄」で調べればこのコールバック地獄とどう付合うのか、
46
+
47
+ テクニックを含めて色々出てきますので、やりたいことが増えたら調べてみてください。
38
48
 
39
49
 
40
50
 

1

今回のコードの答え的なコードを記載

2019/01/23 03:14

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -12,36 +12,60 @@
12
12
 
13
13
 
14
14
 
15
- > ```JavaScript
15
+ データの扱いに関しては下記を参考にしてください。
16
16
 
17
- > var data=[];// 空の配列用意
17
+ JavaScriptは非同期処理実現するために、
18
18
 
19
- > var data = function () {
20
-
21
- > for (var i = 0; i < json.length; i++) {
22
-
23
- > data = place_obj;
19
+ 関数やメソッドの引数にコールバック関数を設定するという思想があります。
24
-
25
- > }
26
-
27
- > };
28
-
29
- > ```
30
20
 
31
21
 
32
22
 
33
- ん?なんで同じスコープで同じ変を何回も宣言しいるんですか?
23
+ このコールバック関は全然別の世界に受け渡され
34
24
 
25
+ 実行しても良いタイミング(Ajax通信を行い、数秒後結果が帰ってきたら)によく分からない場所で実行されます。
26
+
35
- しかして関数宣言を色々と端折ってないですか?
27
+ つまり、この世界の外にはう帰ってこれません。
36
28
 
37
29
 
38
30
 
31
+ この辺がコールバック地獄というコールバック関数でやりたい事が増えると、
32
+
33
+ 延々とコードがネストして超読みづらいクソコードになる地獄の入り口で、解消するテクニックは色々とありますが割愛。
34
+
35
+ 必要に応じて調べて見て下さい。
36
+
39
- もしそうなら質問文をちゃんと修正しくださいね
37
+ 「コールバック地獄」で調べれば出きます
40
38
 
41
39
 
42
40
 
43
- JavaScriptは非同期処理を解決するために、
41
+ ```JavaScript
44
42
 
45
- TODOリスト的に実行したい処理を関数で包んで変数や引数として束縛する言語ですので、
43
+ $.ajax({ // json読み込み開始
46
44
 
45
+ type: 'GET',
46
+
47
+ url: './data/data.json',
48
+
49
+ dataType: 'json'
50
+
51
+ }).then(function (data) {
52
+
53
+ // 確実にthen(関数)という書き方で繋げること
54
+
47
- そういう端折り方はJavaScript致命的、なんにもドバイできなくなってしまうので注意してください。
55
+ var place_obj = data[0]; // 最初の値[0]の添字でアクセすれば
56
+
57
+ data = data.slice(1); // 1行目のデータを捨てたいならArray.prototype.sliceを使う
58
+
59
+
60
+
61
+ // 非同期関数に一度入ると外の世界には帰ってこれないので、
62
+
63
+ // place_objやdataを扱いたい場合は全てこの中に記述すること
64
+
65
+ console.log(place_obj);
66
+
67
+ console.log(data);
68
+
69
+ });
70
+
71
+ ```