提问者:小点点

Nodejs未处理的promise


我一直得到“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;

共2个答案

匿名用户

首先,由于您正在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;