【问题标题】:Double socketIO event bug双socketIO事件bug
【发布时间】:2014-12-30 18:00:18
【问题描述】:

我正在开发一个测验应用程序。我有一个错误,现在让我忙了 4 个小时。 我正在尝试在我的应用程序中使用 socketIO。玩家可以将他们的答案发布给测验大师。测验大师可以在他的个人页面上查看它们。问题是,当我以玩家身份提交答案时,测验大师一侧的 socket.on() 会触发两次。

从数据库中获取答案,然后从套接字中获取答案(我认为这就是问题所在):

 $http.get('/api/antwoorden/' + $scope.linkHash)
                        .success(function (data) {
                            $scope.answers = data.doc.ingezonden;
                            console.log("****GEZONDEN VAN DATABASE****", $scope.answers)
                            var i = 0;
                            socketIO.on('answerSend', function (object) {
                                i = i + 1;
                                console.log(i);
                                if(object.uitvoering === $scope.myCode) {
                                    $scope.answers.push(object.answer);
                                    console.log("***", object);
                                }
                                console.log("*****NU IS DIE DIT*****", $scope.answers);
                            });
                        });

控制台输出

【问题讨论】:

    标签: javascript angularjs node.js debugging socket.io


    【解决方案1】:

    每次运行 $http.get 时,都会添加此事件处理程序的新副本:

    socketIO.on('answerSend', function (object) ...
    

    因此,在运行两次之后,您将拥有双重事件处理程序。运行三遍后,三倍事件处理程序等等。您需要确保只添加一次事件处理程序。

    我不知道您的代码的整体结构,但我猜您想在 http 响应代码之外添加事件处理程序,因此只需添加一次。

    【讨论】:

    • 你先生成就了我的一天:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2022-01-03
    • 2022-12-16
    • 1970-01-01
    • 2018-10-28
    • 2020-03-16
    • 2016-12-25
    相关资源
    最近更新 更多