angularjs 没有使用 angular-socket-io 执行延迟承诺

angularjs not executing deferred promise using angular-socket-io

解决 后,我现在遇到一个新问题 angular 在等待套接字连接的函数内暂停。

控制器:

.controller('myCtrl',function($scope, socket) {

  var sendMsg = function(msg) {
    socket.then(function(msg) {
      socket.emit('newMsg', msg);
    });
  }

  //simplified example
  var msg = 'Hi Mom!';
  sendMsg(msg);

});

问题是 socket.emit() 永远不会被解雇。如果我删除 socket.then(),我将得到一个错误 socket.emit is not a function。我们必须等待套接字初始化(这是基于在另一个控制器中成功登录并通过 socket 工厂广播)。这是先有鸡还是先有蛋的悖论吗?如何在另一个函数中触发 socket.emit?其他类似的功能起作用,例如:

socket.then(function(socket) {
 socket.on('connect',function() {
   //do something. This works.
 });
});

问题似乎是您有两个 msg 参数。然而,第二个是套接字:

var sendMsg = function(msg) {
    socket.then(function(socket) { // <--
        socket.emit('newMsg', msg);
    });
}