普通函数–一路执行到底
generator函数–可以暂停执行
yield是什么
yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字。
yield关键字实际返回一个IteratorResult(迭代器)对象,它有两个属性,value和done,分别代表返回值和是否完成。
yield无法单独工作,需要配合generator(生成器)的其他函数,如next,懒汉式操作,展现强大的主动控制特性。
function *show(){
alert("a")
yield;
alert("b")
}
let gun=show();
gun.next();//弹出a
//踹一下走一下
gun.next();//弹出b
核心
yield 传参 ,返回
function *show(){
alert("a")
let a=yield;
alert("b")
alert(a) //弹出12
}
//传参
gun.next(5)
gun.next(12)
返回
function *show(){
alert("a")
yield 10;
alert("b")
return 55
}
let gun=show();
let res1=gun.next()
console.log(res1)
//打印出来的res1是一个json对象
//{value: 10, done: false}
let res2=gun.next()
console.log(res2)
//{value: 55, done: true}最后一步结果return实现
同步:
同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。
异步:
将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉你,你的请求系统已经响应了。你可以关闭界面了。
同步,是所有的操作都做完,才返回给用户结果。即写完数据库之后,在相应用户,用户体验不好。
异步,不用等所有操作等做完,就相应用户请求。即先相应用户请求,然后慢慢去写数据库,用户体验较好。