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

回答編集履歴

3

update

2016/07/22 23:48

投稿

退会済みユーザー
answer CHANGED
@@ -50,4 +50,17 @@
50
50
 
51
51
  ```
52
52
 
53
+ これは,Promise.resolve() で作った Promiseを単純に2回連続で動作させているのではなく,一つのPromiseをチェーンさせています(Promise.resolve().then() が 返却した Promise の .prototype.then() を 読んでいる).
53
54
 
55
+ モダンなブラウザにある fetch API などがこのチェーンを有効活用していてわかり易い例の一つだと思います.
56
+
57
+ ```
58
+ fetch('/users.html')
59
+ .then(function(response) {
60
+ return response.text()
61
+ }).then(function(body) {
62
+ document.body.innerHTML = body
63
+ })
64
+ ```
65
+
66
+

2

update

2016/07/22 23:48

投稿

退会済みユーザー
answer CHANGED
@@ -14,4 +14,40 @@
14
14
  console.log("sec")
15
15
  })
16
16
  })()
17
+
18
+ //=> first
19
+ //=> undefined
20
+ //=> sec
21
+
17
- ```
22
+ ```
23
+
24
+
25
+ return にすると,Promise の機能の一つであるチェーンが発動します.
26
+
27
+ このページのチェーン参照
28
+ https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
29
+
30
+ 上の例では,二回目のthenの引数である `b` は undefined です.
31
+ なぜなら,チェーンされず単純に2回逐次的にPromiseを動作させているためです.
32
+
33
+ then メソッドはPromiseを返すので、return を使うことで,thenの呼び出しを簡単に繋ぐことができます.
34
+
35
+ ```
36
+ (function(){
37
+ var a = Promise.resolve()
38
+ var b = a.then(function() {
39
+ console.log("first")
40
+ return 44;
41
+ }).then(function(d){
42
+ console.log(d)
43
+ console.log("sec")
44
+ })
45
+ })()
46
+
47
+ //=> first
48
+ //=> 44
49
+ //=> sec
50
+
51
+ ```
52
+
53
+

1

fix

2016/07/22 23:44

投稿

退会済みユーザー
answer CHANGED
@@ -5,8 +5,8 @@
5
5
 
6
6
  ```
7
7
  (function(){
8
- var a= Promise.resolve()
8
+ var a = Promise.resolve()
9
- var b= a.then(function(resolve) {
9
+ var b = a.then(function() {
10
10
  console.log("first")
11
11
  Promise.resolve(44)
12
12
  }).then(function(d){