我正在尝试接收一个json文件,在一个事件发射后使用socket.on
,并在另一个文件中使用这个响应。我对套接字的了解非常有限。下面是代码。
主文件:
const socketclass = require('../public/socket/client');
await socketclass.emitMsg();
let val = socketclass.receivedSch;
console.log(val);
显然,receivedSch
的值是未定义的。
客户端.js
var socketIo = require('socket.io-client');
var socket = socketIo('http://localhost:9096');
exports.emitMsg = async function() {
socket.emit('getSchema', () => {});
}
socket.on('resJson', (response) => {
exports.receivedSch = response;
return response;
});
resJson
事件和JSON文件是通过9096
端口从另一台服务器正确接收的,只是不知道如何在let val = socketclass.receivedSch;
之前等待接收事件
简单地返回response
对我的研究也是有效的,但是我不知道如何从socket.on
中返回它
3条答案
按热度按时间hsvhsicv1#
您的
exports.emitMsg
没有做您认为它应该做的事情,这里的async
关键字除了返回解析为undefined的承诺之外,什么也不做。因为
socket.emit
是一个回调函数,所以需要 Package 成new Promise
。那么试试-〉
为了使
ack
真正有意义,您可能还需要使用结果,如-〉lx0bsm1f2#
通过使用Express应用程序修复了它:
客户端.js
在启动应用程序之前需要该文件:
通过使用
app.jsonhandler
,可以在任何地方访问来自套接字的响应wxclj1h53#
请按照以下步骤来实现这一点。
1.在文件中包含
const EventEmitter = require('events');
。1.在
socket.on
之前创建事件发射器对象const myEmitter =新事件发射器();套接字.on(“resJson”,(响应)=〉{导出.接收到的Sch =响应; myEmitter.emit('得到响应',响应);//发射事件(重要)});
1.使用
myEmitter
对象接收响应。myEmitter.on('get_response',函数(数据){//console.log(数据); });
也许能帮到你。