Javascript 未经处理的承诺
我不断收到“UnhandledPromisejectionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromis 我已经处理了所有的承诺,但错误依然存在Javascript 未经处理的承诺,javascript,node.js,express,Javascript,Node.js,Express,我不断收到“UnhandledPromisejectionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePro
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循环,该循环内有承诺,它将不起作用。对循环或任何其他函数使用normal。显然在循环函数中不起作用。所以把它存储在一个变量函数中
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;
const router=require('express').router();
const User=require('../modules/User');
const auth=require('../authenticate/auth');
路由器.post('/create',auth,(req,res,next)=>{
让uid=req.user.uid;
试一试{
User.findById(uid)
。然后(用户=>{
让业务=()=>{
for(让index=0;index{
res.json(用户);
},(err)=>next(err))
.catch(错误=>{
res.json({err})
})
},(err)=>next(err))
.catch(错误=>{
res.json({err,消息:'user not exist'})
})
}
捕捉(错误){
res.send(err)
}
})
module.exports=路由器;
我认为问题不在于您在问题中包含的代码。我能看到上面的代码会导致未经处理的拒绝的唯一方法是,如果catch
块末尾的res.send(err)
或forEach
中的拒绝处理程序中的res.json({err})
抛出错误,这对我来说似乎不太可能。也许在auth
回调中……您还可以省略try-catch块,findById的.catch块就足够了。