重复执行时未处理的承诺拒绝

Posted

技术标签:

【中文标题】重复执行时未处理的承诺拒绝【英文标题】:Unhandled promise rejection on repeat execution 【发布时间】:2018-07-20 15:12:45 【问题描述】:

这是我的代码:

app.post("/blogs/:id/comments", function (req, res) 
    blog.findById(req.params.id, function (err, finded) 
        if (err) 
            console.log(finded)
            console.log(err);
            console.log("finded data")
            res.redirect("/blogs");
         else 
            Comment.create(req.body.comment, function (err, comment) 
                if (err) 
                    console.log(comment)
                    console.log(err);
                    console.log("my coomeent")


                 else 
                    finded.comments.push(comment);
                    finded.save();
                    res.redirect("/blogs/" + finded._id);
                
            )
        
    )
);

当我尝试第二次插入评论时,代码会出现以下错误:

.(node:6064) UnhandledPromiseRejectionWarning: 未处理的承诺 拒绝(拒绝 id:1):ValidationError:博客验证失败: cmets:强制转换为 [undefined] 失败 "["_id":"5a7dee043918a20128a1e39e","text":"嘿","author":"himansu","__v":0]" 在路径“cmets”(节点:6064)[DEP0018] DeprecationWarning:未处理 承诺拒绝已被弃用。在未来,承诺拒绝 未处理的将终止 Node.js 进程 非零退出代码。

【问题讨论】:

【参考方案1】:

Himansu,我认为finded.comments.push(comment); 方法返回了一个承诺。所以你必须处理承诺。喜欢:

finded.comments.push(comment)
.then(result => 
    finded.save();
    res.redirect("/blogs/" + finded._id);
)
.catch(err => 
    console.log(err);
)

【讨论】:

以上是关于重复执行时未处理的承诺拒绝的主要内容,如果未能解决你的问题,请参考以下文章

处理多个承诺拒绝[重复]

mongoose 的重复键错误处理和未处理的承诺拒绝

Google Chrome 在播放 audio.play() 方法时未捕获(承诺)DOMException [重复]

稍后赶上承诺拒绝[重复]

等待但从未解决/拒绝承诺内存使用[重复]

使用 fetch 时拒绝承诺 [重复]