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);
キューに突っ込む順番とか違いそうだけど概ね同じ動作をする