LoginSignup
0
0

More than 1 year has passed since last update.

127.Promiseチェーン

Posted at

#promiseなしとありで比較しながら書いてみよう

promiseなし

promiseなし
function sleep(callback, val) {
  setTimeout(function() {
    console.log(val++);
    callback(val);
  }, 1000);
}

sleep(function(val) {
  sleep(function(val) {
    sleep(function(val) {
      sleep(function(val) {
  
      }, val);
    }, val);
  }, val);
}, 0);

promiseあり

promiseあり
function sleep(val) {
  return new Promise(function(resolve) {
    setTimeout(function() {
      console.log(val++);
      resolve(val);
    }, 1000);
  });
}

sleep(0).then(function(val) {
  return sleep(val);
}).then(function(val) {
  return sleep(val);
}).then(function(val) {
  return sleep(val);
}).then(function(val) {
  return sleep(val);
}).then(function(val) {
  return sleep(val);
})

<大まかな流れ>

1.関数を実行する
2.Promiseが生成
3.setTimeout内での処理を行う
4.then以下に1を再び実行する処理を行う

<もう少し細かくみると>

1.sleep(0).を実行
2.return new Promiseとして、Promiseが生成される。 
3.resolveを引数にして、Promise(関数)をいれる
4.setTimeoutを記述し、第一引数にresolve(val)を実行
5.実行するとthen以下のsleep(val)が返えるので再び1に戻る

キーポイント

*非同期処理を続けるには,Promiseを生成し続けなければならない
→そのためPromiseを返却し、常に静止しなければならない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0