回答編集履歴

1

回答を追記

2015/07/27 11:11

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -103,3 +103,91 @@
103
103
 
104
104
 
105
105
  ひとまず、ajax も絡めた実際のコードを質問に追記すると良いかと思います。
106
+
107
+
108
+
109
+ ---
110
+
111
+
112
+
113
+ `$.ajax` の引数の `success` は使わずに `$.ajax` の戻り値の `then` で処理するようにします。
114
+
115
+
116
+
117
+ `then` に渡すコールバック関数の引数は・・ `success` に渡すコールバック関数の引数とは違った気がするのですが、パッと思い出せないので調べてください。
118
+
119
+
120
+
121
+ `mark_question` 関数は `then` の戻り値を返します。
122
+
123
+
124
+
125
+ これらは関数の呼び出し元で Promise を利用するためです。
126
+
127
+
128
+
129
+ 関数の呼び出し側のコードで Promise を直列につなげます。
130
+
131
+
132
+
133
+ かなり簡略化しましたが、下記のような感じです。
134
+
135
+
136
+
137
+ ```javascript
138
+
139
+ function mark_question (while_i) {
140
+
141
+ return $.ajax({
142
+
143
+ type: 'get',
144
+
145
+ url: '?'
146
+
147
+ })
148
+
149
+ .then(function(){
150
+
151
+ $('.result').append('<li>' + while_i + '</li>');
152
+
153
+ })
154
+
155
+ }
156
+
157
+
158
+
159
+ var defer = $.Deferred().resolve();
160
+
161
+
162
+
163
+ for (var i = 1; i < 26; i++) {
164
+
165
+ (function(){
166
+
167
+ var j = i;
168
+
169
+ defer = defer.then(function(){
170
+
171
+ return mark_question(j)
172
+
173
+ });
174
+
175
+ }())
176
+
177
+ }
178
+
179
+ ```
180
+
181
+
182
+
183
+ もし、これが何をやっているのかわからないなら、jQuery と Deferred(Promise) について学ぶ必要があります。
184
+
185
+
186
+
187
+ なお、これは↑であげた2番目のコード例です(ajax が直列に実行されるようにする)。
188
+
189
+ 3番目の「非同期処理の待ち合わせ」でも、頑張ればできます。
190
+
191
+
192
+
193
+