重点在于yeild将生成器函数分成了n+1份,每次生成器函数调用next()方法都会,执行一个yeild块的作用域,假如一个生成器函数中有三个yeild,并且在第二次调用时next()方法中携带了参数那么,这个第二次调用next()携带的参数就会成为第一次yeild的结果
function getUser(){
setTimeout(() => {
let data = ‘用户名称’
iterator.next(data); //此处是第二次在调用函数,传入的参数会作为第一个yield返回的结果。
}, 1000);
}
function getOrder(){<br /> setTimeout(() => {<br /> let data = '订单数据'<br /> iterator.next(data); ** //此处是第三次调用函数**,传入的参数会作为第二个yield返回的结果。<br /> }, 1000);<br /> }
function getGoods(){<br /> setTimeout(() => {<br /> let data = '商品数据'<br /> iterator.next(data); **//此处是第四次调用函数,**传入的参数会作为第三个yield返回的结果。<br /> }, 1000);<br /> }
function * gen (){<br /> let one = yield getUser();<br /> console.log(one);<br /> let two = yield getOrder();<br /> console.log(two);<br /> let three = yield getGoods();<br />** ** console.log(three);<br /> }
let iterator = gen();<br /> iterator.next(); ** // 此处是为第一次调用了这个生成器**