2017-12-29 23 views
0

私はfindOne()をMongooseで使用して関数を書いていましたが、後で返された結果を別の関数に使用したいと思います。どうすればいい?ありがとう!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 
    }) 

} 

これは私が後で

var newDeal = Deal.findDeal(dealRequest); 

答えて

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}); 
}) 
} 

を呼び出す関数である関数で解像度を追加し、あなたが代わりに約束を使用することができます

0

をres.send使用しています。

あなたの機能は次のようになります。

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
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 = 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を使用することをお勧め:待つ

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) 
    } 
})() 

ノートは約束を非同期機能とベースに使用しなければなりません。

関連する問題