探索es6系列之----Generator生成器函数

以前知道es6的generator很好使,并且还有点复杂,项目赶上了又有点忘记了因此又重温下,同时记录下来,方便之后回忆 es6

1. Generator两个特征

①function关键字与函数名之间有* ②函数体内有yieldbash

执行流程

①执行生成器函数,至关于生成一个实例 ②实例调用next()在最开始或者上一个暂停处向下执行至下一个yield或者return(yield是暂停,next()是播放😄是否是很带感)异步

next(param)带参数

next的参数为上一条yield的返回值async

举个🌰 函数

function* foo(x) {
    var y = 2*(yield(x+2))
    var z = yield(y/4)
    return x+y+Z
}
let bar = foo(2)
bar.next() //{value:4,done:false} 返回yield(2+2)= 4
bar.next(7) //{value:4,done:false} 设置yield(x+2) = 7,那么y= 2*7=14,那么yield(y/4) = 3.5
bar.next(3) //{value:4,done:false} 设置z = yield(y/4) = 3 那么 x+y+z = 2+14+3 = 19
复制代码

##es7的async函数(偷偷告诉你,将来这个确定很常见)
其实async函数就是换了个马甲,把*换成了async ,把yield换成await;看起来语义化一些,不过,人家仍是有变化的:async能够不用挨个调用next()去移动指针。而是等待await后面的语句执行完成(包括异步请求或其余操做),才会继续执行,达到同步的效果。并且aysnc返回的是Promise对象ui

举个🌰spa

async function fun(item){
    let sym = await myfun1(item);//执行第一个异步请求
    let haha = await myfun2(sym);//执行第二个请求
    return haha
}
let result = fun('test').then(res => {
    console.log(res)
}).catch(err =>{
    console.error(err)
})
复制代码

blog阅读指针

相关文章
相关标签/搜索