ログ

見る価値ありません

JavaScriptのPromiseでループする

Promiseで、というのはasync/awaitを用いないという意味

これはasync/awaitを用いた1秒おきに30までFizzBuzzを表示し続けるコード

const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const fizzBuzz = n => n % 15 === 0 ? 'FizzBuzz' : n % 3 === 0 ? 'Fizz' : n % 5 === 0 ? 'Buzz' : n;

let count = 1;
while(count <= 30) {
  await sleep(1000);
  console.log(fizzBuzz(count));
  count++;
}

これと概ね同じ動作を async/await を用いず、 Promise を陽に扱って実現したい

こうする

const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const fizzBuzz = n => n % 15 === 0 ? 'FizzBuzz' : n % 3 === 0 ? 'Fizz' : n % 5 === 0 ? 'Buzz' : n;

const loop = count => {
  return sleep(1000).then(() => {
    console.log(fizzBuzz(count));
    return count + 1;
  }).then(count => {
    if(count > 30) { return; }
    return loop(count);
  });
};
loop(1);

キューに突っ込む順番とか違いそうだけど概ね同じ動作をする