如何强制异步函数等到完成

时间:2013-06-11 12:34:14

标签: javascript node.js socket.io

我在这里看到了一些类似的问题,但似乎没有一个与此直接相关。我正在阅读一个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
          }); 

但我得到的错误我认为与处理的异步性有关。如何强制它等待处理函数在发出之前完成?

1 个答案:

答案 0 :(得分:2)

您正在覆盖sentiment功能:

var sentiment;                                <-- declare a var...
sentiment(data.text, function (err, result) { <-- ..and call it (which fails)
    sentiment = result.score; 
});