2016-10-05 2 views
0

Mongoose를 사용하여 Math.random과 Mongoose의 findOne을 사용하여 데이터베이스에서 임의의 값을 가져 오려고합니다. 내 함수 내에서 내가 얻는 가치가 정의됩니다. 그러나 다른 클래스의 함수를 호출 할 때 정의되지 않은 값을받습니다. 이 자바 스크립트의 비동기 성격 때문에 알지만,이 문제를 해결하는 방법을 잘 모르겠습니다. 모든 조언을 부탁드립니다!몽구스 findOne을 사용하는 함수는 undefined를 반환합니까?

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); 
}); 
관련 문제