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

質問編集履歴

2

追記

2018/04/18 02:12

投稿

miga
miga

スコア7

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  ```javascript
7
7
  var func1 = function(){
8
- return new Promise(function(resolve,reject){
8
+ return new Promise(function(resolve){
9
9
  var sum = 1+1; //処理1 (15分掛かる処理)
10
10
  resolve(sum);
11
11
  })
@@ -37,6 +37,7 @@
37
37
  処理1
38
38
 
39
39
 
40
+
40
41
  ただ、上記のコードの最後の部分を以下のように順番を変えて、実行すると、このような結果になりましたので、処理結果の出力順は、Promiseを呼び出す順番によって決まるのかなと思ってしまいました。
41
42
  ```javascript
42
43
  func2().then(function(sum){console.log(sum)});
@@ -45,4 +46,47 @@
45
46
  ```
46
47
  処理2
47
48
  処理1
48
- 処理3
49
+ 処理3
50
+
51
+
52
+ #### Re:think49さん
53
+
54
+ Promise内でコールバック関数を使わないと非同期処理にならないとのことで、上記コードが非同期にならない理由がわかりました。以下のようにすれば期待する結果が得られるでしょうか。コメントアウトに記述した時間だけ処理に時間が掛かると仮定として考えてください。
55
+ ```javascript
56
+ var func1 = function(){
57
+ return new Promise(function(resolve){
58
+ setTimeout(function(){
59
+ var sum = 1+1; //処理1 (15分掛かる処理)
60
+ resolve(sum);
61
+ },0);
62
+ })
63
+ }
64
+
65
+ var func2 = function(){
66
+ return new Promise(function(resolve){
67
+ setTimeout(function(){
68
+ var sum = 2+2; //処理2 (10分掛かる処理)
69
+ resolve(sum);
70
+ },0);
71
+ })
72
+ }
73
+
74
+ var func3 = function(){
75
+ return new Promise(function(resolve){
76
+ setTimeout(function(){
77
+ var sum = 3+3; //処理3 (5分掛かる処理)
78
+ resolve(sum);
79
+ },0);
80
+ })
81
+ }
82
+
83
+ func2().then(function(sum){console.log(sum)});
84
+ func1().then(function(sum){console.log(sum)});
85
+ func3().then(function(sum){console.log(sum)});
86
+ ```
87
+
88
+ 期待する結果
89
+
90
+ 6 //5分後
91
+ 4 //10分後
92
+ 2 //15分後

1

誤字

2018/04/18 02:12

投稿

miga
miga

スコア7

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,4 @@
1
1
  ### 前提・実現したいこと
2
-
3
- ここに質問の内容を詳しく書いてください。
4
2
  Promiseを使って以下のようなコードを書いたとき、処理1-3の結果はどのような順番で表示されるかを知りたいです。それぞれの処理は完了するまで、コメントアウトに記載している時間が掛かる前提です。
5
3
 
6
4
  ### 該当のソースコード