Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未经处理的承诺_Javascript_Node.js_Express - Fatal编程技术网

Javascript 未经处理的承诺

Javascript 未经处理的承诺,javascript,node.js,express,Javascript,Node.js,Express,我不断收到“UnhandledPromisejectionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePro

我不断收到“UnhandledPromisejectionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisionWarning:UnhandledPromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromisePromis

我已经处理了所有的承诺,但错误依然存在

    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块就足够了。