我如何socket.emit()来自函数的数据?

时间:2015-01-19 16:14:00

标签: javascript node.js socket.io

Node.js - Socket.io

如果这是字符串或硬编码变量,我可以将数据从服务器传递到客户端:

var greeting = 'hello';
socket.emit('greeting', greeting);

但是当数据来自一个函数时,它不再起作用了:

function search() {
 var greeting = 'hello';
}
search();
socket.emit('greeting', greeting);

修改
让我分享更多代码:(请注意,console.log结果有效,显示JSON数据,但emit显示为null)。

io.sockets.on('connection', function (socket) {
  socket.on('user location', function(content) {
    fetch();
    socket.emit('results', fetch());
  });
});

function fetch() {
  yelp.search({term: "food", location: location, limit: 1}, function(error, data) {
    var results = data.businesses;
    console.log(results); // THIS WORKS
    return results;
  });
}

2 个答案:

答案 0 :(得分:3)

您的变量未在函数外定义。

这应该有效:

var greeting;

function search() {
    greeting = 'hello';
}
search();
socket.emit('greeting', greeting);

或者您使用函数的返回值,这更加优雅:

function search() {
    var greeting = 'hello';

    return greeting;
}

socket.emit('greeting', search());

有关变量范围的进一步阅读,我可以推荐"You don't know JS" series

答案 1 :(得分:0)

这样做: -

io.sockets.on('connection', function (socket) {
  socket.on('user location', function(content) {
    fetch(function(data){
        socket.emit('results', data);
    });
  });
});

function fetch(callback) {
  yelp.search({term: "food", location: location, limit: 1}, function(error, data) {
    var results = data.businesses;
    console.log(results); // THIS WORKS
    callback(results);
  });
}