0

Mongoose ODM で socket.io の使用を開始し、問題が発生しました... データベースからデータ (いくつかの記事) をフェッチする必要があるとします。

クライアントコード:

socket.on('connect', function (data) {
  socket.emit('fetch_articles',function(data){       
    data.forEach(function(val,index,arr){
      $('#articlesList').append("<li>"+val.subject+"</li>")
    });
  });
});

およびサーバーコード:

var article_model = require('./models');

io.sockets.on('connection', function (socket) {
    var articles = {};
    // Here i fetch the data from db
    article_model.fetchArticles().sort('-_id').limit(5).exec(function(err,data){
      articles= data; // callback function
    });

    // and then sending them to the client
    socket.on('fetch_articles', function(fn){
      // Have to set Timeout to wait for the data in articles
      setTimeout(function(){fn(articles)},1000);
    });
});

したがって、すぐに実行される socket.on コールバックと同時にコールバックに入るデータを待つ必要があります。

では、この問題に対する簡単で正しい解決策はありますか?

4

1 に答える 1

1

これが欲しいようです:

var articles = null;
socket.on('fetch_articles', function(fn) {
  if (articles) {
    fn(articles);
  } else {
    article_model.fetchArticles().sort('-_id').limit(5).exec(function(err,data) {
      articles = data;
      fn(articles);
    });
  }
});
于 2013-04-29T15:52:59.400 に答える