【问题标题】:Enter twice in socket.on event在 socket.on 事件中输入两次
【发布时间】:2019-01-14 23:45:52
【问题描述】:

我是 Angular 和 Node.js 的新手。 我的代码对服务器端函数执行 socket.emit 并在 socket.on 事件('listartists')中接收响应。 不幸的是,他在这个事件中进入了两次,我不明白为什么。 在服务器端(app.js)我放置了日志并且该函数被正确调用了一次,但随后它通过了 socket.on 两次('listartists')。

谢谢大家

var appAng = angular.module('appAng', []).controller('myCtrl', function($scope) {
  socket.on('listartists', function(msg) {  
    // !!! enter twice this part of the code
    var ClientMessage = JSON.parse(msg);
    if (ClientMessage.ClientID == GetClientUniqueId()) {                
      var artistslist = JSON.parse(ClientMessage.Message);            
      $scope.$apply(function() {        
        var artistslist=JSON.parse(ClientMessage.Message);
        $scope.artists = artistslist;      
      }); 
    }   
  });
});

【问题讨论】:

  • “两次进入”是什么意思?由于某种原因,您还解析了两次ClientMessage.Message。你能显示你的后端代码吗?假设 socket.io 有不同的methods for broadcasting
  • 您好,感谢重播!事件 socket.on() 中的代码并不重要。实际上,问题在于它在事件中进入了两次。如果我从 Angular 模块中写入 socket.on 事件,那么它只会执行一次,但我无法在外部使用范围

标签: node.js angularjs


【解决方案1】:

我将我的代码修改为:

socket.on('listartists', function(msg){  
var ClientMessage=JSON.parse(msg);
if (ClientMessage.ClientID== GetClientUniqueId())
{
    console.log("Arriva Lista Artisti " + ClientMessage.ClientID);
    var artistslist =JSON.parse(ClientMessage.Message);
    $scope.artists = artistslist; 
    $scope.$apply( function(){}); 

}
});

无论如何,如果我删除 $scope.$apply(function(){}); socket.on 事件只被调用一次, 否则它会从那里经过两次。 我觉得问题是SCOPE的管理有什么想法?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2011-12-20
    • 2016-01-13
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多