回答編集履歴

3

update

2016/07/22 23:48

投稿

退会済みユーザー
test CHANGED
@@ -102,6 +102,32 @@
102
102
 
103
103
 
104
104
 
105
+ これは,Promise.resolve() で作った Promiseを単純に2回連続で動作させているのではなく,一つのPromiseをチェーンさせています(Promise.resolve().then() が 返却した Promise の .prototype.then() を 読んでいる).
105
106
 
106
107
 
107
108
 
109
+ モダンなブラウザにある fetch API などがこのチェーンを有効活用していてわかり易い例の一つだと思います.
110
+
111
+
112
+
113
+ ```
114
+
115
+ fetch('/users.html')
116
+
117
+ .then(function(response) {
118
+
119
+ return response.text()
120
+
121
+ }).then(function(body) {
122
+
123
+ document.body.innerHTML = body
124
+
125
+ })
126
+
127
+ ```
128
+
129
+
130
+
131
+
132
+
133
+

2

update

2016/07/22 23:48

投稿

退会済みユーザー
test CHANGED
@@ -30,4 +30,78 @@
30
30
 
31
31
  })()
32
32
 
33
+
34
+
35
+ //=> first
36
+
37
+ //=> undefined
38
+
39
+ //=> sec
40
+
41
+
42
+
33
43
  ```
44
+
45
+
46
+
47
+
48
+
49
+ return にすると,Promise の機能の一つであるチェーンが発動します.
50
+
51
+
52
+
53
+ このページのチェーン参照
54
+
55
+ https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
56
+
57
+
58
+
59
+ 上の例では,二回目のthenの引数である `b` は undefined です.
60
+
61
+ なぜなら,チェーンされず単純に2回逐次的にPromiseを動作させているためです.
62
+
63
+
64
+
65
+ then メソッドはPromiseを返すので、return を使うことで,thenの呼び出しを簡単に繋ぐことができます.
66
+
67
+
68
+
69
+ ```
70
+
71
+ (function(){
72
+
73
+ var a = Promise.resolve()
74
+
75
+ var b = a.then(function() {
76
+
77
+ console.log("first")
78
+
79
+ return 44;
80
+
81
+ }).then(function(d){
82
+
83
+ console.log(d)
84
+
85
+ console.log("sec")
86
+
87
+ })
88
+
89
+ })()
90
+
91
+
92
+
93
+ //=> first
94
+
95
+ //=> 44
96
+
97
+ //=> sec
98
+
99
+
100
+
101
+ ```
102
+
103
+
104
+
105
+
106
+
107
+

1

fix

2016/07/22 23:44

投稿

退会済みユーザー
test CHANGED
@@ -12,9 +12,9 @@
12
12
 
13
13
  (function(){
14
14
 
15
- var a= Promise.resolve()
15
+ var a = Promise.resolve()
16
16
 
17
- var b= a.then(function(resolve) {
17
+ var b = a.then(function() {
18
18
 
19
19
  console.log("first")
20
20