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

質問編集履歴

9

質問内容の修正

2018/11/14 10:53

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,45 +1,30 @@
1
1
  when apply を使った並列化の記事はよくでてくるのですが
2
2
  その終了後に同期処理をいれる方法がまったくでてこなくて困っています
3
3
 
4
- 本当に動かしたいコードを短いテストコードに落とし込めなかったので
5
-
6
- https://qiita.com/steelydylan/items/c8afe481b03e486be344
7
- をおかりして以下のようなサンプルを用意しました
8
4
  ```
9
- <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
10
- <script>
5
+ function f() {
11
- var ajaxs = ['https://code.jquery.com/jquery-3.3.1.min.js', 'https://code.jquery.com/jquery-3.3.1.min.js'];
6
+ for(let i = 0; i < 10; i++) {
12
-
13
- var wait = function(){
7
+ var deferredFunc = function(){
14
- var d = new $.Deferred();
15
- setTimeout(function(){
16
- d.resolve();
17
- },5000);
18
- return d.promise();
8
+ return $ajax(...).then(
9
+ function() {},
10
+ function() {}
11
+ );
12
+ };
13
+ deferredArray.push(deferredFunc());
14
+ }
15
+ $.when.apply(null, deferredArray).then(
16
+ function() {},
17
+ function() {}
18
+ );
19
19
  }
20
20
 
21
- var getObjs = function(){
22
- var defarr = [];
23
- ajaxs.forEach(function(url){
24
- var d = new $.Deferred();
25
- $.getJSON(url,function(json){
26
- items.push(json);
27
- d.resolve();
28
- });
21
+ f();
29
- defarr.push(d.promise());
30
- });
31
- return $.when.apply($,defarr);
22
+ console.log('test');
32
- }
23
+ ```
33
24
 
34
- var message = function(){
35
- console.log("everything is done");
25
+ これで最後のメッセージの終了をまってから test を表示するにはどうすればいいんでしょうか
36
- }
37
26
 
38
- wait().then(getObjs).then(message);
39
- console.log('test')
40
-
41
-
42
- </script>
43
27
  ```
44
-
45
- これで最後のメッセージの終了をまってから test を表示するにはどうすればいいんでしょうか
28
+ f().then(() => console.log('test'));
29
+ ```
30
+ でもだめでした

8

質問内容の修正

2018/11/14 10:53

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  本当に動かしたいコードを短いテストコードに落とし込めなかったので
5
5
 
6
6
  https://qiita.com/steelydylan/items/c8afe481b03e486be344
7
- 参考にして以下のようなサンプルを用意しました
7
+ おかりして以下のようなサンプルを用意しました
8
8
  ```
9
9
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
10
10
  <script>

7

質問内容の修正

2018/11/14 10:06

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,59 +1,45 @@
1
1
  when apply を使った並列化の記事はよくでてくるのですが
2
2
  その終了後に同期処理をいれる方法がまったくでてこなくて困っています
3
3
 
4
- 以下のようにネットワーク処理を並列化した
5
- ```
6
- function f() {
7
- for(let i = 0; i < 10; i++) {
8
- var deferredFunc = function(){
9
- return $ajax(...).then(
10
- function() {},
11
- function() {}
12
- );
13
- };
14
- deferredArray.push(deferredFunc());
15
- }
16
- $.when.apply(null, deferredArray).then(
17
- function() {},
18
- function() {}
19
- );
20
- }
21
- ```
22
- という非同期関数があるのですがこれの終了後処理いた
4
+ 本当動かしたいコードテストコードに落とし込めなかっ
23
5
 
6
+ https://qiita.com/steelydylan/items/c8afe481b03e486be344
24
-
7
+ を参考して以下のようなサンプルを用意しました
25
8
  ```
26
- f();
9
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
27
- console.log("test");
10
+ <script>
28
- ```
29
- とかくと f が終わる前に実行されてしまうので
11
+ var ajaxs = ['https://code.jquery.com/jquery-3.3.1.min.js', 'https://code.jquery.com/jquery-3.3.1.min.js'];
30
12
 
13
+ var wait = function(){
14
+ var d = new $.Deferred();
15
+ setTimeout(function(){
16
+ d.resolve();
17
+ },5000);
18
+ return d.promise();
19
+ }
31
20
 
32
- ```
33
- function f() {
34
- for(...) {
35
- var deferredFunc = function(){
21
+ var getObjs = function(){
22
+ var defarr = [];
23
+ ajaxs.forEach(function(url){
36
- return $ajax(...).then(
24
+ var d = new $.Deferred();
25
+ $.getJSON(url,function(json){
37
- function,
26
+ items.push(json);
38
- function
27
+ d.resolve();
39
- );
28
+ });
29
+ defarr.push(d.promise());
40
- };
30
+ });
41
- deferredArray.push(deferredFunc());
42
- }
43
- return $.when.apply(null, deferredArray).then(
31
+ return $.when.apply($,defarr);
44
- function,
45
- function
46
- );
47
32
  }
48
33
 
49
- f().then(function() {
34
+ var message = function(){
35
+ console.log("everything is done");
36
+ }
37
+
38
+ wait().then(getObjs).then(message);
50
- console.log("test");
39
+ console.log('test')
40
+
41
+
51
- });
42
+ </script>
52
43
  ```
53
- とかいたのですがやはりすぐ実行されてしまいます
54
44
 
55
- JSの非同期処理がまったくわかってないんですが
56
- f.then.then つなげば必ず終了をまってから実行されわけででしょうか
45
+ これ最後のメッセージの終了をまってから test を表示すどうすればいんでしょうか
57
- $.when.apply().then は何を返してるんでしょうか…
58
-
59
- jQuery は 3.3.1 です

6

質問内容の修正

2018/11/14 10:05

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  以下のようにネットワーク処理を並列化した
5
5
  ```
6
6
  function f() {
7
- for(...) {
7
+ for(let i = 0; i < 10; i++) {
8
8
  var deferredFunc = function(){
9
9
  return $ajax(...).then(
10
10
  function() {},

5

質問内容の修正

2018/11/14 09:14

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -7,15 +7,15 @@
7
7
  for(...) {
8
8
  var deferredFunc = function(){
9
9
  return $ajax(...).then(
10
- function,
10
+ function() {},
11
- function
11
+ function() {}
12
12
  );
13
13
  };
14
14
  deferredArray.push(deferredFunc());
15
15
  }
16
16
  $.when.apply(null, deferredArray).then(
17
- function,
17
+ function() {},
18
- function
18
+ function() {}
19
19
  );
20
20
  }
21
21
  ```

4

追記

2018/11/14 09:09

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -54,4 +54,6 @@
54
54
 
55
55
  JSの非同期処理がまったくわかってないんですが
56
56
  f.then.then でつなげば必ず終了をまってから実行されるわけではないのでしょうか…
57
- $.when.apply().then は何を返してるんでしょうか…
57
+ $.when.apply().then は何を返してるんでしょうか…
58
+
59
+ jQuery は 3.3.1 です

3

質問内容の修正

2018/11/14 09:07

投稿

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

2

質問内容の修正

2018/11/14 08:59

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -42,10 +42,11 @@
42
42
  function
43
43
  );
44
44
  }
45
- ```
45
+
46
46
  f().then(function() {
47
47
  console.log("test");
48
48
  });
49
+ ```
49
50
  とかいたのですがやはりすぐ実行されてしまいます
50
51
 
51
52
  JSの非同期処理がまったくわかってないんですが

1

タグ追加

2018/11/14 08:56

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes