Results 7 comments of iolh

> > @MrErHu 关于nextListener的理解好像有点问题,源码中的那段注释并不是说明增加一个nextListeners的原因的,增加nextListener这个副本是为了避免在遍历listeners的过程中由于subscribe或者unsubscribe对listeners进行的修改而引起的某个listener被漏掉了。比如你在遍历到某个listener的时候,在这个listener中unsubscribe了一个在当前listener之前的listener,这个时候继续i ++的时候就会直接跳过当前listener的下一个listener,不知道有没有描述清楚 > > 如果是为了避免这种case的话,也没有必要增加nextListeners呀,通过listeners = currentListeners就能解决问题。 > 即便是在某个listener执行中出现了subscribe/unsubscribe , > 只要对currentListeners进行新的赋值操作即可:或使currentListeners数组+1,或使currentListeners数组-1。可是无论如何,listeners依旧保持着循环之前的订阅数组的引用,也就是说用于循环的这个数组在这种情况下是稳定的,也就不会发生“跳过”。 进行新的赋值开始for循环会引起重复执行订阅回调。 为什么需要 nextListeners ? 因为 订阅回调可以产生多个订阅或者嵌套订阅,而任何一个订阅回调中又可以取消平级或外层订阅,这会导致什么问题呢,for循环 遍历时 订阅数组 listeners 长度改变,遍历到的索引位置 index 没变。 如果取消的订阅索引位置在当前索引之后,说明此时被取消的订阅回调尚未执行,属于成功退订。 可是如果取消的订阅索引位置在当前索引之前呢,说明此时被取消的订阅回调已经执行,并且,此时由于listeners数组长度改变,所有数组元素下标发生 -1,当前索引...

了不起!期待早日上线。 It's amazing and I'm looking forward to it.

作者真是渊博!

向大佬学习读下规范,这工程量可真不小,既感且佩!