请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

B站面试题:如何解决发布订阅模式中的循环问题

老师好,这节内容我想起了之前在B站面试时遇到的问题,面试官让我手写一个发布订阅模式,当时把伪代码和思路给讲出来了(看过设计模式一书)。然后面试官追问了一句,如何解决发布订阅模式中的循环问题,比如:

const A = () => {
	// 一些处理
	e.emit('y')
}
const B = () => {
	// 一些处理
	e.emit('x')
}

e.on('x', A)
e.on('y', B)

e.emit('x')

然后当时我就😳懵了,因为书上没写。所以,我想问的是,这个问题,面试官想考察的是啥啊?该如何回答?

正在回答 回答被采纳积分+3

2回答

GZ77 2023-05-03 01:21:08

这不是内存泄漏吗?

0 回复 有任何疑惑可以回复我~
双越 2022-03-21 21:30:55

好问题。

避免循环最常用的方式就是记录,例如用一个 Set ,每次 emit 就记录下 key ,然后判断是否有循环的 key 。可以照这个思路思考一下。

0 回复 有任何疑惑可以回复我~
  • 为什么要用 Set ? 我理解应该是 emit 之后,在遍历运行数组的事件前,记录下当前 evnetKey 的值(假定改为 runningKey ),然后再遍历运行完之后将 runningKey 设为 null。那么下次 emit 之前,判断当前 emit 的 eventKey 是否等于 runningKey,如果不等,就 return。
    
    思路就是避免在注册的回调函数里面再次触发 emit ,只有等当前 emit 的所有事件执行完,才允许下一次emit。
    
    我思路是这样,不知道老师你说的是怎么样呢?
    回复 有任何疑惑可以回复我~ 2022-04-17 00:18:02
  • 能不能放到链表里面,如果判断链表闭环了,就不执行了。
    回复 有任何疑惑可以回复我~ 2022-05-10 17:49:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信