teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/11/14 11:23

投稿

yambejp
yambejp

スコア117906

answer CHANGED
@@ -35,4 +35,28 @@
35
35
  console.log("end");
36
36
  });
37
37
  });
38
+ ```
39
+
40
+ # 一連の処理後に更に処理
41
+ ```javascript
42
+ function f() {
43
+ var d=$.Deferred();
44
+ var deferredArray=[];
45
+ for(let i = 0; i < 10; i++) {
46
+ var deferredFunc = function(){
47
+ return $.ajax({url:"y.php"}).then(function(){
48
+ console.log(i);
49
+ });
50
+ };
51
+ deferredArray.push(deferredFunc());
52
+ }
53
+ $.when.apply(null, deferredArray).then(function(){
54
+ console.log("end");
55
+ d.resolve();
56
+ });
57
+ return d.promise();
58
+ }
59
+ f().then(function(){
60
+ console.log('test');
61
+ });
38
62
  ```

1

調整

2018/11/14 11:23

投稿

yambejp
yambejp

スコア117906

answer CHANGED
@@ -20,4 +20,19 @@
20
20
  <?PHP
21
21
  sleep($_GET["sleep"]);
22
22
  ?>
23
+ ```
24
+
25
+ # Promiseが返らなくても
26
+ Defferedを複数発行すれば非同期全体をまってくれる(Promise.all)はずですけどね
27
+ ```javascript
28
+ $(function(){
29
+ console.log("start");
30
+ var defs=Array(3).fill(null).map(function(){return $.Deferred()});
31
+ setTimeout(function(){console.log(1);return defs[0].resolve()},3000),
32
+ setTimeout(function(){console.log(2);return defs[1].resolve()},1000),
33
+ setTimeout(function(){console.log(3);return defs[2].resolve()},2000),
34
+ $.when.apply(null,defs).then(function(){
35
+ console.log("end");
36
+ });
37
+ });
23
38
  ```