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;
});
}
答案 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);
});
}