双socketIO事件错误

时间:2014-11-03 23:22:15

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

我正在开发一个测验应用。我有一个让我忙碌4小时的小虫。 我想在我的应用程序中使用socketIO。玩家可以将他们的答案发布到测验大师。测验大师可以在他的个人页面上查看它们。问题是,当我作为播放器提交答案时,测验主控方的socket.on()会触发两次。

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

 $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);
                            });
                        });

控制台输出

console output

1 个答案:

答案 0 :(得分:5)

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

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

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

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