回答編集履歴
1
回答を追記
answer
CHANGED
@@ -50,4 +50,47 @@
|
|
50
50
|
})
|
51
51
|
```
|
52
52
|
|
53
|
-
ひとまず、ajax も絡めた実際のコードを質問に追記すると良いかと思います。
|
53
|
+
ひとまず、ajax も絡めた実際のコードを質問に追記すると良いかと思います。
|
54
|
+
|
55
|
+
---
|
56
|
+
|
57
|
+
`$.ajax` の引数の `success` は使わずに `$.ajax` の戻り値の `then` で処理するようにします。
|
58
|
+
|
59
|
+
`then` に渡すコールバック関数の引数は・・ `success` に渡すコールバック関数の引数とは違った気がするのですが、パッと思い出せないので調べてください。
|
60
|
+
|
61
|
+
`mark_question` 関数は `then` の戻り値を返します。
|
62
|
+
|
63
|
+
これらは関数の呼び出し元で Promise を利用するためです。
|
64
|
+
|
65
|
+
関数の呼び出し側のコードで Promise を直列につなげます。
|
66
|
+
|
67
|
+
かなり簡略化しましたが、下記のような感じです。
|
68
|
+
|
69
|
+
```javascript
|
70
|
+
function mark_question (while_i) {
|
71
|
+
return $.ajax({
|
72
|
+
type: 'get',
|
73
|
+
url: '?'
|
74
|
+
})
|
75
|
+
.then(function(){
|
76
|
+
$('.result').append('<li>' + while_i + '</li>');
|
77
|
+
})
|
78
|
+
}
|
79
|
+
|
80
|
+
var defer = $.Deferred().resolve();
|
81
|
+
|
82
|
+
for (var i = 1; i < 26; i++) {
|
83
|
+
(function(){
|
84
|
+
var j = i;
|
85
|
+
defer = defer.then(function(){
|
86
|
+
return mark_question(j)
|
87
|
+
});
|
88
|
+
}())
|
89
|
+
}
|
90
|
+
```
|
91
|
+
|
92
|
+
もし、これが何をやっているのかわからないなら、jQuery と Deferred(Promise) について学ぶ必要があります。
|
93
|
+
|
94
|
+
なお、これは↑であげた2番目のコード例です(ajax が直列に実行されるようにする)。
|
95
|
+
3番目の「非同期処理の待ち合わせ」でも、頑張ればできます。
|
96
|
+
|