迭代器和可迭代协议总结

迭代器和可迭代协议

解决副作用的 redux 中间件
redux-thunk:需要改动action,可接收action是一个函数
redux-promise:需要改动action,可接收action是一个promise对象,或action的payload是一个promise对象
以上两个中间件,会导致action或action创建函数不再纯净。
redux-saga将解决这样的问题,它不仅可以保持action、action创建函数、reducer的纯净,而且可以用模块化的方式解决副作用,并且功能非常强大。
redux-saga是建立在ES6的生成器基础上的,要熟练的使用saga,必须理解生成器。
要理解生成器,必须先理解迭代器和可迭代协议。

迭代

类似于遍历

遍历:有多个数据组成的集合数据结构(map、set、array等其他类数组),需要从该结构中依次取出数据进行某种处理。

迭代:按照某种逻辑,依次取出下一个数据进行处理。

迭代器 iterator

JS语言规定,如果一个对象具有next方法,并且next方法满足一定的约束,则该对象是一个迭代器(iterator)。

next方法的约束:该方法必须返回一个对象,该对象至少具有两个属性:

  • value:any类型,下一个数据的值,如果done属性为true,通常,会将value设置为undefined
  • done:bool类型,是否已经迭代完成

通过迭代器的next方法,可以依次取出数据,并可以根据返回的done属性,判定是否迭代结束。

迭代器创建函数 iterator creator

它是指一个函数,调用该函数后,返回一个迭代器,则该函数称之为迭代器创建函数,可以简称位迭代器函数。

可迭代协议

ES6中出现了for-of循环,该循环就是用于迭代某个对象的,因此,for-of循环要求对象必须是可迭代的(对象必须满足可迭代协议)

可迭代协议是用于约束一个对象的,如果一个对象满足下面的规范,则该对象满足可迭代协议,也称之为该对象是可以被迭代的。

可迭代协议的约束如下:

  1. 对象必须有一个知名符号属性(Symbol.iterator)
  2. 该属性必须是一个无参的迭代器创建函数

for-of循环的原理

调用对象的[Symbol.iterator]方法,得到一个迭代器。不断调用next方法,只有返回的done为false,则将返回的value传递给变量,然后进入循环体执行一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值