ES6之genorator和yield使用(迭代器)

例1:

function *g(){
    yield 100
    yield 200
    return 300
}
let res = g()
console.log(res);
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
// 输出:
/*
Object [Generator] {}
{ value: 100, done: false }
{ value: 200, done: false }
{ value: 300, done: true }
{ value: undefined, done: true }
*/

next方法类似promise .then链式调用
done属性的值代表是否调用完毕

例2:

function* g() {
  yield 100;
  yield 200;
  yield g2();
  return 500;
}

function* g2() {
  yield 300;
  yield 400;
}

let res = g();
console.log(res);
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
// 输出
/*
Object [Generator] {}
{ value: 100, done: false }
{ value: 200, done: false }
{ value: Object [Generator] {}, done: false }
{ value: 500, done: true }
{ value: undefined, done: true }
*/

可以看出,正常情况下,如果在一个迭代器里调用另一个迭代器,返回的是迭代器本身,不会对另一个迭代器遍历
如果想要调用另一个迭代器进行遍历的话,可以使用 yeild* 修饰这个迭代器:

function* g() {
  yield 100;
  yield 200;
  yield* g2();
  return 500;
}

function* g2() {
  yield 300;
  yield 400;
}

let res = g();
console.log(res);
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
// 输出:
/*
Object [Generator] {}
{ value: 100, done: false }
{ value: 200, done: false }
{ value: 300, done: false }
{ value: 400, done: false }
{ value: 500, done: true }
{ value: undefined, done: true }
*/
posted @   zoo-x  阅读(94)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)
点击右上角即可分享
微信分享提示