JS回调返回undefined不是一个函数

时间:2015-07-24 09:11:03

标签: javascript callback socket.io

我以为我知道如何实现回调,这就是我所拥有的:

的index.html:

socket.on('userCapture', data, function(callback){
    if(callback){
        //do stuff
    } else {
        alert('Username in use.');
    }
});

index.js:

socket.on('userCapture', function(data, callback){
    username = data.username;
    question = data.question;
    socket.username = username;
    socket.room = username;

    function isInArray(arr,obj) {
        return (arr.indexOf(obj) != -1);
    }
    if(isInArray(usernames, username)){
        callback(false);
    } else {
        callback(true);
    }
});

我的想法是检查usernames数组中传递的值并传递回客户端(如果存在或不存在)。我不明白为什么它导致未定义,因为我在其他地方有完全相同的代码并且它的工作原理..

此致

1 个答案:

答案 0 :(得分:0)

您正在为socket.on()指定回调,但您不能这样做。 根据{{​​3}},emit()send()可以进行回调,因为您希望基本上发送消息,然后在不编写其他socket.on()的情况下检索结果。

更改您的代码以使用emit()

客户代码

socket.emit('userCapture', data, function(response){
    if(response){
        //do stuff
    } else {
        alert('Username in use.');
    }
});

服务器代码

socket.on('userCapture', function(data, callback){
    username = data.username;
    question = data.question;
    socket.username = username;
    socket.room = username;

    function isInArray(arr,obj) {
        return (arr.indexOf(obj) != -1);
    }

    // you can just send the result back
    callback(isInArray(usernames, username));
});