promiseについて勉強しており、thenメソッドチェーンによって1秒ごとにコンソールに何かが表示される処理を作ってみようと思いました。
そこでpromiseオブジェクトを返す以下の関数を書き【その1】で実行してみると
javascript
1var delay = time => { 2 return new Promise((r=>{ 3 setTimeout(()=>{ 4 r(); 5 },time) 6 })) 7}
javascript
1#############その1############ 2 3delay(1000) 4 .then(()=>{ 5 console.log("bbbb"); 6 delay(1000) 7 }) 8 .then(()=>{ 9 console.log("cccc"); 10 })
1000msたった後、bbbbとccccが同時に出力されてしまいました。
以下の【その2】、【その3】では1秒おきにうまく出力することができました。
javascript
1#############その2############ 2 3delay(1000) 4 .then(()=>{ 5 console.log("bbbb"); 6 return new Promise((r=>{ 7 setTimeout(()=>{ 8 r(); 9 },1000) 10 })) 11 }) 12 .then(()=>{ 13 console.log("cccc"); 14 })
javascript
1#############その3############ 2 3delay(1000) 4 .then(()=>{ 5 console.log("bbbb"); 6 return delay(1000) 7 }) 8 .then(()=>{ 9 console.log("cccc"); 10 })
#疑問
なぜpromiseオブジェクトをreturnするdelay関数が書いてあるだけ(その1)では、うまくいかなかったのでしょうか?
thenにおけるreturnの解釈のされ方がいまいちわかりません。
#思ったこと
delayは呼び出し元に対してpromiseオブジェクト返却する関数です。その2もpromiseオブジェクトをそのまま返却していると思います(名前がついているかついていないかの違い?)
なるほど、thenの中でpromiseオブジェクトを生成しなくちゃいけないのかと思ったのですが【その3】というpromiseオブジェクトを返却する関数を返却してみたらうまく作動する・・・なぜだ・・
書いていてまた混乱してきてしまいました・・・駄文すみません
どなたかご教示いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/11 03:07
2019/06/11 03:15
2019/06/11 03:27