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

回答編集履歴

1

#sample

2019/07/18 09:50

投稿

yambejp
yambejp

スコア117876

answer CHANGED
@@ -1,4 +1,66 @@
1
1
  やりたい処理によります
2
2
  - A→B→Cと順番に処理したいならpromiseをネストしていきます
3
3
  - A,B,Cを並行して動かして一番遅いのを待つならpromise.allで十分です
4
- - たんにA,B,Cをバラバラに動かしてバラバラに処理するなら普通にfor文でまわすだけです
4
+ - たんにA,B,Cをバラバラに動かしてバラバラに処理するなら普通にfor文でまわすだけです
5
+
6
+ # sample
7
+ - ajax.php
8
+ とりあえずsというパラメータでsleepする秒を渡してその値を表示するモノを用意
9
+ ```PHP
10
+ <?PHP
11
+ $sleep=filter_input(INPUT_GET,'s');
12
+ sleep($sleep);
13
+ print $sleep;
14
+ ?>
15
+ ```
16
+ ※ajax.php?s=2とすると、2秒待って"2"と表示される
17
+
18
+ # A→B→Cと順番に処理
19
+ 2,3,1と渡すと、2秒後に"2"、その3秒後に"3"、その1秒後に"1"
20
+ ```javascript
21
+ $(function(){
22
+ (async()=>{
23
+ for(var i of [2,3,1]){
24
+ await $.ajax({
25
+ url:"ajax.php",
26
+ data:{s:i},
27
+ }).done(function(data){
28
+ console.log(data);
29
+ });
30
+ }
31
+ })();
32
+ });
33
+ ```
34
+ # A,B,Cを並行して動かして一番遅いのを待つ
35
+ 2,3,1を渡すと、一番遅い3を待って2,3,1と表示される
36
+ ```javascript
37
+ $(function(){
38
+ var d=[];
39
+ $.each([2,3,1],function(x){
40
+ d[x]=$.Deferred();
41
+ $.ajax({
42
+ url:"ajax.php",
43
+ data:{s:$(this).get(0)},
44
+ }).done(function(data){
45
+ d[x].resolve(data);
46
+ });
47
+ });
48
+ $.when.apply(null,d).done(function(r1,r2,r3){
49
+ console.log([r1,r2,r3]);
50
+ });
51
+ });
52
+ ```
53
+ # A,B,Cをバラバラに動かしてバラバラに処理するなら
54
+ 2,3,1と渡すが、1,2,3と順次表示される
55
+ ```javascript
56
+ $(function(){
57
+ $.each([2,3,1],function(){
58
+ $.ajax({
59
+ url:"ajax.php",
60
+ data:{s:$(this).get(0)},
61
+ }).done(function(data){
62
+ console.log(data);
63
+ });
64
+ });
65
+ });
66
+ ```