非同期プロセス制御の典型的な問題は、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)
}
})()
ノートは約束を非同期機能とベースに使用しなければなりません。