回答編集履歴
2
Promise周りの説明文を追記
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
今回のコードの答え的なコードを記載
test
CHANGED
@@ -12,36 +12,60 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
|
15
|
+
データの扱いに関しては下記を参考にしてください。
|
16
16
|
|
17
|
-
|
17
|
+
JavaScriptは非同期処理を実現するために、
|
18
18
|
|
19
|
-
> var data = function () {
|
20
|
-
|
21
|
-
> for (var i = 0; i < json.length; i++) {
|
22
|
-
|
23
|
-
|
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
|
-
|
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
|
-
|
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
|
+
```
|