我在这里看到了一些类似的问题,但似乎没有一个与此直接相关。我正在阅读一个Twitter流并使用socket.io发出它,如下所示:
stream.on('data', function (data) {
var geo=false,latitude,longitude;
if(data.geo!=null){
geo = true;
latitude = data.geo.coordinates[0];
longitude = data.geo.coordinates[1];
}
io.sockets.volatile.emit('tweets', {
user: data.user.screen_name,
text: data.text,
geo : geo,
latitude: latitude,
longitude: longitude,
});
});
我想在发送到套接字之前添加一些数据处理。处理代码是:
var sentiment;
sentiment(data.text, function (err, result) {
sentiment = result.score;
});
我希望将其发布为:
io.sockets.volatile.emit('tweets', {
user: data.user.screen_name,
text: data.text,
geo : geo,
latitude: latitude,
longitude: longitude,
sentiment: sentiment
});
但我得到的错误我认为与处理的异步性有关。如何强制它等待处理函数在发出之前完成?
答案 0 :(得分:2)
您正在覆盖sentiment
功能:
var sentiment; <-- declare a var...
sentiment(data.text, function (err, result) { <-- ..and call it (which fails)
sentiment = result.score;
});