Node.js 请建议一种更好的方法来编写此代码,而不必进行回调
由于某些原因,这里的猫鼬调用2依赖于猫鼬调用1。虽然代码是工作,但我希望它是正确的框架。因此,请建议一种更好的方法。我希望我澄清了这个问题。 谢谢Node.js 请建议一种更好的方法来编写此代码,而不必进行回调,node.js,mongoose,callback,nested,Node.js,Mongoose,Callback,Nested,由于某些原因,这里的猫鼬调用2依赖于猫鼬调用1。虽然代码是工作,但我希望它是正确的框架。因此,请建议一种更好的方法。我希望我澄清了这个问题。 谢谢 PS:我是NODE.js的新手,使用async/await会让您受益匪浅,尤其是使用涉及不同异步执行分支的条件。它还使不同异步代码路径的集中错误处理变得更容易: router.get('/:id',ensureLogin,(req,res)=>{ somemodel.findOne({...}) ****//mongoose call
PS:我是NODE.js的新手,使用
async/await
会让您受益匪浅,尤其是使用涉及不同异步执行分支的条件。它还使不同异步代码路径的集中错误处理变得更容易:
router.get('/:id',ensureLogin,(req,res)=>{
somemodel.findOne({...}) ****//mongoose call 1****
.then(result=>{
if(some condition){
User.findOne(some condition) ***//mongoose call 2***
.then(result=>{
//Some code is to be executed here using the "User.findOne..."
}
res.render('some template')
.catch(err=>{
console.log(err)
})
}
else{
res.render('some another template');
}
})
.catch(err=>{
res.render('error/500');
})
})
很多Node.js调用的异步特性一开始可能会让人非常困惑,但您很快就习惯了,并意识到这是一项伟大的技术 我建议使用语法,这使代码更像同步代码。这当然使它更容易遵循 我会将代码重构为如下内容:
router.get('/:id', ensureLogin, async (req,res) => {
try {
let result = await somemodel.findOne({...});
if(some condition){
let secondResult = await User.findOne(some condition);
//Some code is to be executed here using the "User.findOne..."
res.render('some template')
} else {
res.render('some another template');
}
} catch(e) {
res.render('error/500');
}
}
,请调查一下@诺克斯
router.get('/:id', ensureLogin, async (req,res) => {
try {
let result = await somemodel.findOne({/* search criteria */});
if (someCondition(result)) {
let user = await User.findOne({/* search criteria */})
res.render('some template');
} else {
res.render('some another template');
}
} catch (error) {
res.render('error/500');
}
})