function* f() {
yield 1;
yield 2;
return 'ending';
}
var generator = f();
setTimeout(function() {
generator.next()
console.log(generator.next())
}, 1000);
console.log(generator.next())
console.log(generator.next())
程序输出为神马不是:
{ value: 1, done: false }
{ value: 2, done: false }
{ value: ending, done: true }
而是
{ value: 1, done: false }
{ value: 2, done: false }
{ value: undefined, done: true }
.....不是说console了generator才会执行并输出。调用next就会执行,只是你没有打印出来而已
你那里延时了1s,先执行
console.log(generator.next())
console.log(generator.next())
再执行
function() {
generator.next()
console.log(generator.next())
}
function* f() {
yield 1;
yield 2;
return 'ending';
}
var generator = f();
setTimeout(function() {
console.log(generator.next())
}, 1000);
console.log(generator.next())
console.log(generator.next())
/*
{ value: 1, done: false }
{ value: 2, done: false }
{ value: ending, done: true }
*/
function* f() {
yield 1;
yield 2;
return 'ending';
}
var generator = f();
setTimeout(function() {
generator.next()//[1]
console.log(generator.next())//[2]
}, 1000);
console.log(generator.next())//[3]
console.log(generator.next())//[4]
先执行 [3] [4],然后超时定时器符合时间要求后,执行[1] [2]
[3] [4]有输出
[1]没有输出
[2]有输出
{ value: 1, done: false } //[1]输出
{ value: 2, done: false } //[2]输出
{ value: undefined, done: true }//[4]输出
如果
function* f() {
yield 1;
yield 2;
return 'ending';
}
var generator = f();
setTimeout(function() {
console.log(generator.next())//[1]
console.log(generator.next())//[2]
}, 1000);
console.log(generator.next())//[3]
console.log(generator.next())//[4]
那么将看到
{ value: 1, done: false } //[1]输出
{ value: 2, done: false } //[2]输出
{ value: 'ending', done: false } //[3]输出
{ value: undefined, done: true }//[4]输出