質問編集履歴

9

質問内容の修正

2018/11/14 10:53

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,86 +4,56 @@
4
4
 
5
5
 
6
6
 
7
- 本当に動かしたいコードを短いテストコードに落とし込めなかったので
8
-
9
-
10
-
11
- https://qiita.com/steelydylan/items/c8afe481b03e486be344
12
-
13
- をおかりして以下のようなサンプルを用意しました
14
-
15
7
  ```
16
8
 
17
- <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
9
+ function f() {
18
10
 
19
- <script>
11
+ for(let i = 0; i < 10; i++) {
20
12
 
21
- var ajaxs = ['https://code.jquery.com/jquery-3.3.1.min.js', 'https://code.jquery.com/jquery-3.3.1.min.js'];
13
+ var deferredFunc = function(){
22
14
 
15
+ return $ajax(...).then(
23
16
 
17
+ function() {},
24
18
 
25
- var wait = function(){
19
+ function() {}
26
20
 
27
- var d = new $.Deferred();
21
+ );
28
22
 
29
- setTimeout(function(){
23
+ };
30
24
 
31
- d.resolve();
25
+ deferredArray.push(deferredFunc());
32
26
 
33
- },5000);
27
+ }
34
28
 
29
+ $.when.apply(null, deferredArray).then(
30
+
35
- return d.promise();
31
+ function() {},
32
+
33
+ function() {}
34
+
35
+ );
36
36
 
37
37
  }
38
38
 
39
39
 
40
40
 
41
- var getObjs = function(){
41
+ f();
42
42
 
43
- var defarr = [];
44
-
45
- ajaxs.forEach(function(url){
46
-
47
- var d = new $.Deferred();
48
-
49
- $.getJSON(url,function(json){
50
-
51
- items.push(json);
52
-
53
- d.resolve();
54
-
55
- });
56
-
57
- defarr.push(d.promise());
58
-
59
- });
60
-
61
- return $.when.apply($,defarr);
62
-
63
- }
64
-
65
-
66
-
67
- var message = function(){
68
-
69
- console.log("everything is done");
70
-
71
- }
72
-
73
-
74
-
75
- wait().then(getObjs).then(message);
76
-
77
- console.log('test')
43
+ console.log('test');
78
-
79
-
80
-
81
-
82
-
83
- </script>
84
44
 
85
45
  ```
86
46
 
87
47
 
88
48
 
89
49
  これで最後のメッセージの終了をまってから test を表示するにはどうすればいいんでしょうか
50
+
51
+
52
+
53
+ ```
54
+
55
+ f().then(() => console.log('test'));
56
+
57
+ ```
58
+
59
+ でもだめでした

8

質問内容の修正

2018/11/14 10:53

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  https://qiita.com/steelydylan/items/c8afe481b03e486be344
12
12
 
13
- 参考にして以下のようなサンプルを用意しました
13
+ おかりして以下のようなサンプルを用意しました
14
14
 
15
15
  ```
16
16
 

7

質問内容の修正

2018/11/14 10:06

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,114 +4,86 @@
4
4
 
5
5
 
6
6
 
7
+ 本当に動かしたいコードを短いテストコードに落とし込めなかったので
8
+
9
+
10
+
11
+ https://qiita.com/steelydylan/items/c8afe481b03e486be344
12
+
7
- 以下のようにネットワーク処理並列化した
13
+ を参考にして以下のようなサンプル用意まし
8
14
 
9
15
  ```
10
16
 
11
- function f() {
17
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
12
18
 
13
- for(let i = 0; i < 10; i++) {
19
+ <script>
14
20
 
15
- var deferredFunc = function(){
21
+ var ajaxs = ['https://code.jquery.com/jquery-3.3.1.min.js', 'https://code.jquery.com/jquery-3.3.1.min.js'];
16
22
 
17
- return $ajax(...).then(
18
23
 
19
- function() {},
20
24
 
21
- function() {}
25
+ var wait = function(){
22
26
 
23
- );
27
+ var d = new $.Deferred();
24
28
 
25
- };
29
+ setTimeout(function(){
26
30
 
27
- deferredArray.push(deferredFunc());
31
+ d.resolve();
28
32
 
29
- }
33
+ },5000);
30
34
 
31
- $.when.apply(null, deferredArray).then(
32
-
33
- function() {},
35
+ return d.promise();
34
-
35
- function() {}
36
-
37
- );
38
36
 
39
37
  }
40
38
 
41
- ```
42
39
 
40
+
41
+ var getObjs = function(){
42
+
43
+ var defarr = [];
44
+
45
+ ajaxs.forEach(function(url){
46
+
47
+ var d = new $.Deferred();
48
+
49
+ $.getJSON(url,function(json){
50
+
51
+ items.push(json);
52
+
53
+ d.resolve();
54
+
55
+ });
56
+
57
+ defarr.push(d.promise());
58
+
59
+ });
60
+
43
- という非同期関数があるのですがこれの終了後に処理を行いたいです
61
+ return $.when.apply($,defarr);
62
+
63
+ }
44
64
 
45
65
 
46
66
 
47
- 単に
67
+ var message = function(){
48
68
 
49
- ```
69
+ console.log("everything is done");
50
70
 
51
- f();
71
+ }
52
72
 
53
- console.log("test");
54
73
 
55
- ```
56
74
 
75
+ wait().then(getObjs).then(message);
76
+
57
- とかくと f が終わる前に実行されてしまうので
77
+ console.log('test')
58
78
 
59
79
 
60
80
 
61
81
 
62
82
 
83
+ </script>
84
+
63
85
  ```
64
-
65
- function f() {
66
-
67
- for(...) {
68
-
69
- var deferredFunc = function(){
70
-
71
- return $ajax(...).then(
72
-
73
- function,
74
-
75
- function
76
-
77
- );
78
-
79
- };
80
-
81
- deferredArray.push(deferredFunc());
82
-
83
- }
84
-
85
- return $.when.apply(null, deferredArray).then(
86
-
87
- function,
88
-
89
- function
90
-
91
- );
92
-
93
- }
94
86
 
95
87
 
96
88
 
97
- f().then(function() {
98
-
99
- console.log("test");
100
-
101
- });
102
-
103
- ```
104
-
105
- とかいたのですがやはりすぐ実行されてしまいます
106
-
107
-
108
-
109
- JSの非同期処理がまったくわかってないんですが
110
-
111
- f.then.then つなげば必ず終了をまってから実行されわけででしょうか
89
+ これ最後のメッセージの終了をまってから test を表示すどうすればいんでしょうか
112
-
113
- $.when.apply().then は何を返してるんでしょうか…
114
-
115
-
116
-
117
- jQuery は 3.3.1 です

6

質問内容の修正

2018/11/14 10:05

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  function f() {
12
12
 
13
- for(...) {
13
+ for(let i = 0; i < 10; i++) {
14
14
 
15
15
  var deferredFunc = function(){
16
16
 

5

質問内容の修正

2018/11/14 09:14

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -16,9 +16,9 @@
16
16
 
17
17
  return $ajax(...).then(
18
18
 
19
- function,
19
+ function() {},
20
20
 
21
- function
21
+ function() {}
22
22
 
23
23
  );
24
24
 
@@ -30,9 +30,9 @@
30
30
 
31
31
  $.when.apply(null, deferredArray).then(
32
32
 
33
- function,
33
+ function() {},
34
34
 
35
- function
35
+ function() {}
36
36
 
37
37
  );
38
38
 

4

追記

2018/11/14 09:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -111,3 +111,7 @@
111
111
  f.then.then でつなげば必ず終了をまってから実行されるわけではないのでしょうか…
112
112
 
113
113
  $.when.apply().then は何を返してるんでしょうか…
114
+
115
+
116
+
117
+ jQuery は 3.3.1 です

3

質問内容の修正

2018/11/14 09:07

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,10 @@
1
+ when apply を使った並列化の記事はよくでてくるのですが
2
+
3
+ その終了後に同期処理をいれる方法がまったくでてこなくて困っています
4
+
5
+
6
+
1
- ネットワーク処理を並列化した
7
+ 以下のようにネットワーク処理を並列化した
2
8
 
3
9
  ```
4
10
 

2

質問内容の修正

2018/11/14 08:59

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -86,13 +86,15 @@
86
86
 
87
87
  }
88
88
 
89
- ```
89
+
90
90
 
91
91
  f().then(function() {
92
92
 
93
93
  console.log("test");
94
94
 
95
95
  });
96
+
97
+ ```
96
98
 
97
99
  とかいたのですがやはりすぐ実行されてしまいます
98
100
 

1

タグ追加

2018/11/14 08:56

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes