返回未定义的 Javascript 闭包

标签 javascript closures socket.io

<分区>

这是我的代码:

var timeNow = function () {
    var time = new Date();
    return ((time.getHours() < 10)?"0":"") + time.getHours() +":"+ ((time.getMinutes() < 10)?"0":"") + time.getMinutes() +":"+ ((time.getSeconds() < 10)?"0":"") + time.getSeconds();
};

var RegisterConnection = function (socketid, AuthToken) {
    request.get("api.php", function(err, res, Response){ //Response will return {"result": true}
        Response = JSON.parse(Response);
        if (!err && res.statusCode === 200 && Response.result) {
            console.log(Response.result); // true on console
            return (String(Response.result));
        }
    });
};

io.sockets.on("connection", function (clientSocket) {
    clientSocket.on("connectionDone", function (data) {
        clientSocket.authToken = data.authToken;
        clientSocket.emit(
            "info", {
                Time: timeNow(), // It's printing the time
                information: RegisterConnection(data.socketid, data.authToken) // It's printing undefined
            }
        );
    });
});

我是 javascript 闭包的新手,这对我不起作用,因为 RegisterConnection 返回未定义。但在函数本身中,console.log 确实在控制台中打印 true。我做错了什么?

最佳答案

请检查此方法是否适合您:

var timeNow = function () {
    var time = new Date();
    return ((time.getHours() < 10)?"0":"") + time.getHours() +":"+ ((time.getMinutes() < 10)?"0":"") + time.getMinutes() +":"+ ((time.getSeconds() < 10)?"0":"") + time.getSeconds();
};

var RegisterConnection = function (socketid, AuthToken, onSuccess) {
    request.get("api.php", function(err, res, Response){ //Response will return {"result": true}
        Response = JSON.parse(Response);
        if (!err && res.statusCode === 200 && Response.result) {
            console.log(Response.result); // true on console
            onSuccess(String(Response.result));
        }
    });
};

io.sockets.on("connection", function (clientSocket) {
    clientSocket.on("connectionDone", function (data) {
        clientSocket.authToken = data.authToken;
        RegisterConnection(data.socketid, data.authToken, function(result) {
            clientSocket.emit(
                "info", {
                    Time: timeNow(), // It's printing the time
                    information: result
                }
            );
        })
    });
});

关于返回未定义的 Javascript 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456298/

相关文章:

javascript - 如何确保永远不会缓存动态生成的 javascript 文件?

javascript - 我有一个更改主题的网站,我正在尝试让 iframe 更改网站的主题

node.js - Socket.io 错误传递约定

javascript - 是否可以使用非鼠标、非触摸事件与 D3.js 图表进行交互?如果是这样,最有效的方法是什么?

javascript - Jasmine + 异步函数

java - 验证 Java 中反射方法的返回类型和参数

javascript - 闭包的返回值未定义

javascript - 为什么我无法访问原型(prototype)函数(使用闭包)?

ios - Websockets 在 iOS 和 Safari 上不起作用 - OSSStatus 错误 9837

node.js - 如何在socket.io的房间中从客户端调用函数?