ES6的异步终极解决方案分享(3)

function* a(num) { let sum = yield num + 1 console.log(sum);//2 此处是next(r.value)传入的值 let sum2 = yield sum + 2 } let result = a(1); let r = result.next() console.log(r);//此处返回第一次yield的值 2 console.log(result.next(2));//此处返回第二次yield的值 4 console.log(result.next());//此处并没有第三次yield

ES6的异步终极解决方案分享


第一次输出的是第一次yield的值,此时num为调用a函数时传入的值 1,yield返回了num+1,所以第一行打印的对象 value值是 2

第二次打印的是sum值,也就是第一个yield关键字前面接收的值,此值是下面result.next(2)传入的 ,next函数传入的参数,会赋值到相应的yield关键字左边接收的那个变量,在上方案例,也就是sum变量

第三次输出的是a函数中第二个yield返回的值,此时sum为第一次next(2)传入的2,所以此次返回的值是2+2,所以值也就是 4

第四次输出的是最后一个next(),但是上方generator并没有相应的yield返回,所以此时的value为undefined

yield返回的值是一个对象,其中有done和value两个属性,

done 表示该generator是否执行完毕,当没有yield返回时,done的值为true,也就是代表当前generator执行完毕

value表示此次yield关键字右方表达式返回的值,当没有yield时,value为undefined

generator是支持迭代器操作的,例:

function* a(num) { let sum = yield num + 1 console.log(sum);//2 此处是next(r.value)传入的值 let sum2 = yield sum + 2 } let result = a(1); for (const key of result) { console.log(key); }

ES6的异步终极解决方案分享


事实证明generator是实现了迭代器的接口的!

嗯,关于generator的实际应用场景,我是没有遇见的,不过听说 async/await是generator的语法糖??

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7f720047bc9fcc68bf9b54d885fa2822.html