我一直得到“UnhandledPromiseRejectionWarning:UnhandledPromiseRejection.此错误源于在没有catch块的异步函数内部抛出,或拒绝未用.catch()处理的Promission.(拒绝ID:2)”
我已经处理了所有的承诺,但错误仍然存在
const router =require('express').Router();
const User = require('../modules/user');
const auth = require('../authenticate/auth');
router.post('/create', auth, async(req,res, next)=>{
let uid = req.user.uid;
try{
await User.findById(uid)
.then(user=>{
user.Business.forEach(business => {
if(business._id == req.body.buId ){
console.log(business._id)
business.items.push(req.body);
user.save()
.then(user=>{
res.json(user);
},(err) => next(err))
.catch(err=>{
res.json({err})
})
}
else{
res.statusCode = 400;
res.setHeader('content-type', 'application/json');
res.json({err, message:'no such business exist'})
}
});
},(err) => next(err))
.catch (err=>{
res.json({err, message:'user do not exist'})
})
}
catch (err){
res.send(err)
}
})
module.exports= router;
首先,由于您正在user.findbyid和user.save中使用Promise,因此不需要“async”和“await”关键字。您正在使用.catch块处理该错误。
其次,您正在使用一个for Each循环,该循环内部有promise,它将无法工作。使用normal for loop或任何其他。
显然promise在循环函数中不能很好地工作。将其存储在可变变量函数中。
const router =require('express').Router();
const User = require('../modules/user');
const auth = require('../authenticate/auth');
router.post('/create', auth, (req,res, next)=>{
let uid = req.user.uid;
try{
User.findById(uid)
.then(user=>{
let business = ()=>{
for (let index = 0; index < user.Business.length; index++) {
if(user.Business[index]._id == req.body.buId ){
return user.Business[index];
}
}
}
business().items.push(req.body);
user.save()
.then(user=>{
res.json(user);
},(err) => next(err))
.catch(err=>{
res.json({err})
})
},(err) => next(err))
.catch (err=>{
res.json({err, message:'user do not exist'})
})
}
catch (err){
res.send(err)
}
})
module.exports= router;