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 コールバックと同時にコールバックに入るデータを待つ必要があります。
では、この問題に対する簡単で正しい解決策はありますか?