实现一个函数,执行该函数后,每隔 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++))
}
}