2016-10-05 13 views
0

Mongooseを使って、Math.randomとMongooseのfindOneを使用してデータベースからランダムな値を取得しようとしています。私の関数の中では、私が得ている値が定義されています。しかし、別のクラスの関数を呼び出すと、私は未定義の値を受け取ります。これはJavascriptの非同期性のためですが、これを修正する方法はわかりません。何かアドバイスをいただければ幸いです!Mongoose findOneを使用して関数を定義していない関数を使用していますか?

export const getRandomItem2 = (req, res) => { 
    var toReturn; 
    Item.count().exec(function(err, count){ 

    var random = Math.floor(Math.random() * count); 
    Item.findOne().skip(random).exec(
     function (err, result) { 
      toReturn = result.description; 
      console.log('toReturn populated here!' + toReturn); 
      return toReturn; //this is returning undefined 
     }); 
    }); 
} 

答えて

1

あなたはそれを呼び出すときは、その結果を取得するためにコールバック関数を渡す必要があります別の関数でのように、それは、非同期コードです:

export const getRandomItem2 = (callback) => { 
    Item 
     .count() 
     .exec((err, count) => { 
     Item 
      .findOne(Math.floor(Math.random() * count)) 
      .skip(skip) 
      .exec((err, item) => callback(item)); 
     }); 
} 

と、いくつかの別の場所で:

getRandomItem2(item => { 
    console.log(item); 
}); 
関連する問題