2017-12-29 27 views
0

몽구스에서 findOne()을 사용하여 함수를 작성했으며 나중에 다른 함수에 반환 된 결과를 사용하려고합니다. 내가 어떻게 할 수 있니? 감사! findOne() mongoose에서 결과를 반환하는 방법

module.exports.findDeal = function(dealRequest){ 
    Deal.findOne({name:dealRequest},function(err,newDeal){ 
     if (err) throw err; 
     // twiml.message(newDeal.deal) 
     console.log("returned from the model: ",newDeal) 
     return 
    }) 

} 

은 나중에 당신은 약속을 대신 사용할 수 있습니다 res.send

답변

0
module.exports.findDeal = function(res,dealRequest){ 
Deal.findOne({name:dealRequest},function(err,newDeal){ 
    if (err) throw err; 
    // twiml.message(newDeal.deal) 
    console.log("returned from the model: ",newDeal) 
    res.send({'result':newDeal}); 
}) 
} 

함수에 고해상도를 추가 호출하고 사용하는 기능입니다.

그러면 함수는 다음과 같습니다.

module.exports.findDeal = function(dealRequest){ 
    return Deal.findOne({name:dealRequest},function(err,newDeal){ 
     if (err) throw err; 
     // twiml.message(newDeal.deal) 
     console.log("returned from the model: ",newDeal) 
     return newDeal; 
}) 

어딘가 다른 파일

const { findDeal } = require('thisfilename.js'); 
findDeal(somdealvalue).then(function(deal) { 
    console.log(deal); 

}) 
0

var newDeal = Deal.findDeal(dealRequest); 
0
module.exports = { 
    findDeal: function(dealRequest){ 
    return Deal.findOne({name:dealRequest},function(err,newDeal){ 
     if (err) throw err; 
     // twiml.message(newDeal.deal) 
     console.log("returned from the model: ",newDeal) 
     return newDeal; 
     }); 
    } 
}; 

먼저, 외부 함수의 내부 기능 데이터를 리턴하여 외부 함수에서 복귀.

0

비동기 프로세스 제어의 일반적인 문제는 promise 또는 async/await를 사용해야하며 물론 콜백은 괜찮지 만 제안하지는 않습니다.

module.exports.findDeal = function(dealRequest, callback){ //callback function 
    Deal.findOne({name:dealRequest},function(err,newDeal){ 
     if (err) callback(err) 
     console.log("returned from the model: ",newDeal) 
     callback(null, newDeal) 
    }) 
} 

Deal.findDeal(dealRequest, (err, result) => { //callback function 
    var newDeal = result; 
}); 

약속 스타일 : 약속 비동기 기능과 기본에 사용해야 기다리고

module.exports.findDeal = async function (dealRequest) { 
    return new Promise((resolve, reject) => { 
     try { 
      const newDeal = await Deal.findOne({name:dealRequest}); 
      resolve(newDeal) 
     } catch (error) { 
      reject(error) 
     } 
    }) 
} 

(async() => { 
    try { 
     var newDeal = await Deal.findDeal(dealRequest) 
    } catch (error) { 
     console.log(error) 
    } 
})() 

참고 :

module.exports.findDeal = function(dealRequest){ 
    return new Promise((resolve, reject) => { 

     // still callback function is ok 
     Deal.findOne({name:dealRequest},function(err,newDeal){ 
      if (err) reject(err) 
      resolve(newDeal) 
     }) 

     // mongoose return promise, both is ok 
     Deal.findOne({name:dealRequest}).then(newDeal => { 
      resolve(newDeal) 
     }).catch(err => { 
      reject(err) 
     }) 
    }) 

} 

Deal.findDeal(dealRequest).then(result => { 
    var newDeal = result; 
}).catch(err => { 
    console.log(err) 
}) 

하지만 난 당신이 비동기/await를를 사용하는 것이 좋습니다.