JS 基础之异步(五):Generator

本文详细探讨了JavaScript中的Generator函数,解释了如何通过yield暂停和恢复代码执行,以及yield*用于委托执行其他生成器。内容涵盖Generator对象、next方法的参数传递以及yield*的使用场景,帮助读者深入理解异步编程中的生成器机制。
摘要由CSDN通过智能技术生成

接着上一部分继续了解JS 基础之异步(四):Generator(生成器、迭代器源码实现)

Generator函数

function *会定义一个生成器函数,并返回一个Generator(生成器)对象,其内部可以通过 yield 暂停代码,通过调用 next 恢复执行。

调用一个生成器对象并不会马上执行里面的代码语句,而是返回一个这个生成器的迭代器(iterator)对象。当这个迭代器对象的next()方法被调用时,其内部的语句就会被执行到yield的位置,yield后紧跟需要返回的值(可以是函数或表达式)。如果遇到的yieldyield*的话,则表示将执行权交给另一个生成器函数(当前生成器暂停执行)。

注意

  • generator function内部才能使用yield/yield*命令,而generator function内部调用的或声明的其他普通函数是不能调用yield/yield*命令的。
  • 箭头函数不能使用yield,即箭头函数不能用做generator function(但可以用做async function)
// 声明式
function* generator() {
   }

// 表达式
let generator = function* (){
   }

// 作为对象属性
let obj = {
   
    generator: function* (){
   }
}

// 箭头函数不能用做generator function,报错
let obj = {
   
    generator: *() => {
   }
}

// 箭头函数可以用做 async 函数
let obj = {
   
    generator: async () => {
   }
}

在生成器中return

遍历返回对象的done值为true时迭代即结束,不对该value处理。

function* createIterator() {
   
    yield 'a'
    return 1
    yield 'b'
}
let iterator = createIterator()
iterator.next()		
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值