function* dataConsumer() {
console.log('Started');
console.log(`1. ${yield}`);
console.log(`2. ${yield}`);
return 'result';
}
let genObj = dataConsumer();
console.log(genObj.next());// Started
genObj.next('a');// 1. a
// genObj.next('b');//2. b
上述代码输出结果为
Started
{value: undefined, done: false}
1. a
2. b
请问为什么会输出一个 {value: undefined, done: false},
而第二次执行yield则没有返回{value,done}的型式
console.log(genObj.next());这个语句会让dataConsumer在console.log(
1. ${yield}
);这儿停止,而这里yield的返回值是undefined。也就说,实际上是console.log(1. ${yield undefined}
);所以genObj.next()得到的是{value:undefined,done:false},也就是console.log的输出。而你后来传a给next时没有console.log,所以没打印出来,加个log应该也会打印这个undefined。我是用手机回答的,可能排版有问题。我的理解是这样的,有问题欢迎指出。