2017-05-31 49 views
0

我有以下问题。我想从客户端的所有功能socket.emit分离成单独的控制器类,所以我可以调用控制器功能和接收响应:在外部控制器客户端使用socketIO.emit

应用/组件/ client.js

let response = NodeController.root(path); 
console.log('response', response); 
if(response){ 
    var projectInfoId = JSON.parse(response); 
} 

应用程序/控制器/node-controller.js

class NodeController { 
    static root(data){ 
     let tmp; 
     socket.emit('/', data, function (response) { 
      tmp = response; 
     }); 
     return tmp; 
    } 
} 

client.js中的projectInfoId将是未定义的,因为响应是未定义的。如果我用回调函数直接在客户端调用socket.emit(),我会收到数据,我的projectInfoId将包含一些东西。

是否有可能从client.js代码中分离套接字函数,还是必须直接在client.js文件中调用它?

回答

1

这是试图在异步函数上使用返回的典型情况。要做到这一点,正确的方法是添加一个回调的根函数是这样的:

class NodeController { 
    static root(data, callback){ 
     let tmp; 
     socket.emit('/', data, function (response) { 
      tmp = response; 
      callback(tmp); 
     }); 
    } 
} 

,然后用它是这样的:

let response = NodeController.root(path, function(response){ 
    console.log('response', response); 
    if(response){ 
     var projectInfoId = JSON.parse(response); 
    } 
}); 

还有一些其他的方式来处理异步功能。其中之一是async.js npm模块(是的,它可以在客户端上工作),使用函数发生器甚至使用promise。

+0

只是一个简单的回调函数。谢谢! – Morlord

相关问题