实现一个函数,执行该函数后,每隔 1s 在控制台打印从 0 开始递增的数字,直到打印 10 停止
解法1
function printIncrement() {const fn = function* () {for(let i = 0; i <= 10; i++) {yield i;}}const num = fn();const timer = setInterval(() => {// value属性就是当前yield表达式的值const value = num.next().value;if(value <= 10) {console.log(value);} else {clearInterval(timer);}}, 1000)}
解法2
function printIncrement() {let num = 0;const fn = function* () {console.log(num);while(yield num++) {console.log(num);}}const counter = fn();const timer = setInterval(() => {if (num > 10) {clearInterval(timer);}// yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值counter.next(num <= 10);}, 1000)}
解法3
async function printIncrement() {const fn = num => (new Promise((resolve) => {setTimeout(() => {resolve(num)}, 1000)}));let num = 0;while(num <= 10) {console.log(await fn(num++))}}
