什么是generator
它是一个部署了Iterator接口和迭代器的函数,执行generator函数会返回一个迭代器对象,该对象允许我们手动控制迭代流程
迭代器即for...of
初识
形式上,它在function与name之间使用*标识,配合yeild控制迭代器每次的执行位置。可以看到,以yield为分界,将一个函数拆分成了不同的运行阶段,每次执行next,都会对当前的yield进行求值并暂停
next、throw、return控制迭代流程
通过next传参,可以去控制或影响函数中的下一次状态,可以看出,next的参数会被当做上一个yield的返回值
通过return函数可以提前中断迭代流程
校验上一个迭代状态,并手动抛出异常终止迭代
for...of自动遍历
由于generator是部署了迭代协议,且返回了迭代对象,故可以通过for...of自动求值
展开generator嵌套
使用yield*可以将内部嵌套的generator函数展开,大概就像扩展运算符一样
使用this缓存值
由于generator始终返回的是迭代器实例而不是this,故无法向this添加属性,可以通过call或apply方式将this指向修正到迭代器
在antd-pro的models中,我们一般通过diapatch方式去触发某一个ajax请求后将结果保存到state后在通过connect或者useReducer在组件中获取,是否可以尝试直接在原型上获取?
应用
网友评论