【问题标题】:How to execute a function with specified param inside of socket.io connection function如何在socket.io连接函数中执行具有指定参数的函数
【发布时间】:2018-10-30 16:53:23
【问题描述】:

我需要一些关于我的 node.js 应用程序中的回调的帮助。我正在使用 socket.io 来发出数据。我需要创建一个函数,该函数具有在 io.on('connection') 括号之外计算的发出和特定参数。只有当我稍后在我的应用程序中计算参数时,我才需要触发该内部函数。我该怎么做?

示例代码:

io.on('connection', (socket) => {
    function name(param)
    {
        socket.emit('name', param);
    }
    //rest of the socket.io code
}

//function that calculates the param to be executed above^
function()
{
    var param = somevalue;
    //How can i execute function that is in io.on brackets and pass the param to it from here?
}

【问题讨论】:

  • 在将函数调用回 .on 事件时不能返回值吗?

标签: javascript node.js socket.io callback


【解决方案1】:

您可以像这样从.onevent 调用您的函数:

io.on('connection', (socket) => {
    var calculatedParam = calParam(param); //Assuming param exists in the current context...
    socket.emit('name', calculatedParam);
    //rest of the socket.io code
}

//function that calculates the param to be executed above^
function calParam(p)
{
    var calcP = p; //Obviously calculate something here...
    return calcP;
}

【讨论】:

  • 我需要将 socket.emit() 放在一个函数中,以便稍后在特定时间执行它,但确定何时超出此范围的代码。
  • 嗯,你能提供更多的上下文吗?您是否要进行一些异步调用以获取该参数并“发出”该值?
  • 不,我只需要稍后调用这个内部函数并传递一个数字参数,这样我就可以在网站上发出更改。
【解决方案2】:

您可以将io 的返回值分配给一个变量,并在需要时使用它来发出事件。像这样的:

var socket = io('http://localhost');
socket.on('connect', function(){});
socket.on('disconnect', function(){});

io.on('event', (socket) => {
    getParam();
}

function name(param) {
    socket.emit('name', param);
}

function getParam()
{
    var param = somevalue;
    name(param);
}

【讨论】:

  • 问题是我想在其他事件发生后触发内部函数。确定何时执行内部函数的代码位于 io.on 括号之外。
  • 在这种情况下,您可以在外部创建 name 函数,并在需要时从其他函数调用它。
  • 据我所知,我无权访问 io.on 连接范围之外的 socket.emit。
  • 同意@Prera​​kSola 的回答。另外,我没有办法正确地测试它,也许您可​​以将“socket”作为参数发送给该函数,该函数将进行计算并使用它来发出您的值……但不确定。
  • 我在服务器端,所以我需要在 io.on('connection', (socket) => { } 中做的所有事情是对的吗?
【解决方案3】:
io.on('connection', (socket) => {
    // 10 is "param" in Hello
    Hello(10, function(result){
        console.log("Result from Hello function: " + result);

        // you have still access to socket

    });
}

function Hello(param, callback)
{
    // code etc
    var result = param + 1;

    callback(result);
}

【讨论】:

    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多