javascript - 即使我有 catch() 函数,为什么也会收到 UnhandledPromiseRejectionWarning?

标签 javascript node.js mongoose promise es6-promise

我正在尝试使用以下代码将用户保存到我的数据库:

userRoutes.post('/signup', (req, res) => {
    if (req.session.user) req.session.destroy();

    const user = new User(req.body);

    user.save()
    .then(savedUser => {
        req.session.user = savedUser._id;

        res.status(200).json({
            success: true,
            data: {
                firstName: savedUser.firstName,
                lastName: savedUser.lastName,
                username: savedUser.username,
                email: savedUser.email,
                dateCreated: savedUser.dataCreated,
                _id: savedUser._id
            },
        });
    })
   .catch(error => {
        res.status(500).json({
            success: false,
            error
        });
    });
});

但我仍然收到此错误:UnhandledPromiseRejectionWarning:未处理的 promise 拒绝(拒绝 ID:1):TypeError:cb 不是函数

我正在使用 mongoose 来保存文档。

最佳答案

我从未使用过 connect-mongo 并且我没有安装 Mongo 来尝试一下,但我确实快速浏览了源代码,看看是否可以解释一下您遇到的问题。

最新版本(2.0.0)似乎是三周前发布的。我相信该版本中包含此更改:

https://github.com/jdesboeufs/connect-mongo/commit/a8b0fd49368cfc1ea634d4245105e706d2dd98c9

这改变了它调用回调的方式。

destroy的处理在这里:

https://github.com/jdesboeufs/connect-mongo/blob/509c8732061b7786857f6b835f547980c1d81c7f/src/index.js#L292

然后调用withCallback,如下:

https://github.com/jdesboeufs/connect-mongo/blob/509c8732061b7786857f6b835f547980c1d81c7f/src/index.js#L5

我可能完全错了,但这似乎完全符合你的症状。有一个名为 cb 的函数被调用,并且它不会首先检查它是否未定义。

一个简单的测试是将回调函数传递给destroy。这不应该是必需的,我相信这是 connect-mongo 中的一个错误,但它应该有助于确认这确实是您所看到的错误的根源。您可以通过将调试器(例如 Chrome 开发工具)附加到您的 Node 并逐步执行直到遇到错误来进一步诊断。

如果这确实是问题所在,那么我建议使用 connect-mongo 提交错误报告。快速浏览一些其他 session 存储的源代码,在尝试调用回调之前检查回调是否未定义似乎是标准做法。

我想补充一点,我不认为 destroy 是您应该在此处使用的方法。我怀疑您想要重新生成。但是我相信这是一个单独的问题,而不是导致您当前错误的原因。

我还注意到,虽然我说过不需要将回调传递给 destroyregenerate 等,但这仍然是一个好主意因为您确实应该等待完成(或可能失败)然后再继续。

关于javascript - 即使我有 catch() 函数,为什么也会收到 UnhandledPromiseRejectionWarning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999000/

相关文章:

javascript - Highcharts 在具有多个系列和共享工具提示的图表之间共享工具提示

javascript - dygraphs 标签数量与数组中的列数不匹配

javascript - 使用 puppeteer 等待 fs writefile 不会等到文件写入后再继续事件循环

node.js - Mongoose : How to display in the console the content of an Object typed Mixed?

mongodb - 查询集合中最新的唯一对象

javascript - 即使声明并初始化了变量,xpage getComponent 也始终返回 null

javascript - 调用nodejs的多个函数

node.js - 蒙戈 : aggregate $geoNear and $text no results

javascript - Mongoose 保存卡住(回调从未调用)

javascript - Jquery 表单序列化无法在带有 Scala Play Framework 2.2 的 Facebox 上运行