以前知道es6的generator很好使,并且还有点复杂,项目赶上了又有点忘记了因此又重温下,同时记录下来,方便之后回忆 es6
①function关键字与函数名之间有* ②函数体内有yieldbash
①执行生成器函数,至关于生成一个实例 ②实例调用next()在最开始或者上一个暂停处向下执行至下一个yield或者return(yield是暂停,next()是播放😄是否是很带感)异步
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阅读指针