导入时函数未定义

问题描述

我和 redis 一起设置了 socket.io。在另一个文件 (doSomething.js) 中,我尝试访问原始 io 变量以发出消息。 doSomething.jstesting.js 中被调用。而 socket.js 文件调用 testing.js 文件

视觉效果 socket.jstesting.jsdoSomething.jssocket.js

当我尝试访问 doSomething.js 文件中的 testing.js 时,doSomething 未定义。 我认为这个问题被称为循环依赖......我尝试改变

module.exports = {} // original
module.exports.doSomething = doSomething // new way

但是还是不行。也许有一种不同的方式来设置和引用 socket.io? 我该如何解决这个问题?

完整代码

index.js

require('./socket/socket').socketServer.create(server);

socket.js

const { testing } = require('../utilities/actions/testing');
testing();

const socketServer = {
    _initialized: false,_IO: null,get IO() {
        if (!socketServer._initialized) throw new Error('socketServer.create not called!');
        return socketServer._IO;
    },create: (server) => {
        socketServer._IO = io(server,{ cors: { origin: '*' } });

        const redisPort = config.get('redisPort');
        const redisHost = config.get('redisHost');

        const redisConnection = redisAdapter({ host: redisHost,port: redisPort });
        socketServer._IO.adapter(redisConnection);

        socketServer._IO.on('connection',(socket) => {
            logger.debug('connected to socket.io');
        });

        socketServer._initialized = true;
    },};


module.exports.socketServer = socketServer;

testing.js

const { doSomething } = require('../doSomething');
console.log(doSomething); // outputs undefined

function testing() {
    console.log('asfasfas');
}
exports.testing = testing;

doSomething.js

const { socketServer } = require('../../socket/socket');

async function sendOfferToEmployees() {
    const allSockets = socketServer.IO.adapter.nsp.sockets;

    Object.keys(allSockets).map(async (socketId) => {
        const currentSocket = allSockets[socketId];
        try {
            await socketServer.IO.adapter.remoteJoin(socketId,'cool-room');
            currentSocket.emit('cool-event',{...personalizedData});
        } catch (error) {
        }
    });
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)