循环依赖FIX-涉及执行栈问题

今天写代码的时候,踩到了一个坑,是菜鸟宝宝会犯的错误。
错误情况如下:
图片
其实这个问题是我在引用的过程当中,初始执行的时候会产生循环。循环链如下:
socket -> Friends -> Notification -> socket
会发现,代码在执行的时候,会由于需要引入的包而在socket处产生循环,所以就会发现,引入包居然引入不了!
解决方法:将require放到后续会调用到的一个回调地匿名函数中,这样就不会循环啦!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const { SocketIOKoaSession } = require('../middlewares/session');
// 这里引入会产生循环链: socket -> Friends -> Notification -> socket

const initSocket = async (httpServer, app, store) => {
const io = new Server(httpServer, {
cors: {
origin: "*",
}
});
io.on('connect', async (socket) => {
// 在这里引入噢~
const { isFriend } = require('./friends');
const { isInGroup } = require('./groups');
}
}

感觉还需要恶补一下执行栈的问题,才能更深刻地了解到这个解决解决措施的点。实质上是:
全局环境引入了socket,然后后续回调函数当中再次调用 Friends -> Notification -> socket就不会产生循环啦啦啦~~
后续我要在这里认认真真写一下我理解下的执行栈问题,虽然前面在笔记软件整理过(金鱼记忆总是忘记,特别是写代码的过程),但是感觉要在写一次才能更深刻理解。