生成器,用于解决异步深度嵌套的问题(过渡期的产物,没有async好用,koa 框架新版本不支持generator函数)
function * show(){
yield 'yangyi';
yield '18';
return '程序员'
}
let p=show();
console.log(p.next());//{value: "yangyi", done: false}
console.log(p.next());//{value: "18", done: false}
console.log(p.next());//{value: "程序员", done: true} 这是已经是最后一个值了,所以done为true
console.log(p);//输出一个对象
image
可以用for....of....循环遍历出generator函数中的内容,但是,得到的不是对象形式,而且return后的内容遍历不出来。
for(let val of p){
console.log(val);**//yangyi 18**
}
//也可以配合解构与扩展运算,访问内部东西,同样无法访问return后的东西:
let [a,b,c]=p;
console.log(a,b,c);//yangyi 18 undefined
let [a,...c]=p;
console.log(a,c);//yangyi ["18"]
console.log(...p);//yangyi 18
console.log(Array.from(p));//["yangyi", "18"]
//generator函数与Promise对象相结合,解决异步,用的比较多
function * gen(){
let val=yield 'yang';
yield axios.get(`https:\/\/api.github.com/users/${val}`);
}
let g1=gen();
let username=g1.next().value;//指 let val=yield 'yang';
console.log(username);//yang
//把yield axios.get(`https:\/\/api.github.com/users/${val}`);变成一个promise对象
let reqPromise=g1.next(username).value;
reqPromise.then(res=>{
console.log(res.data);
})
关于异步,解决方案:
1.回掉函数
2.事件监听
3.发布/订阅
4.Promise对象
网友评论