猫鼬:UnhandledPromiseRejectionWarning:RangeError:超出最大调用堆栈大小

Posted

技术标签:

【中文标题】猫鼬:UnhandledPromiseRejectionWarning:RangeError:超出最大调用堆栈大小【英文标题】:Mongoose: UnhandledPromiseRejectionWarning: RangeError: Maximum call stack size exceeded 【发布时间】:2019-05-20 06:49:15 【问题描述】:

我的控制器有这个简单的功能:

newUserRequest: async (req, res) => 
    const newRequest = new Request(req.body)
    const thesi = await Thesi.findById(req.params.thesiId)
    const user = await User.findById(req.params.userId)

    newRequest.user = user
    newRequest.thesi = thesi
    await newRequest.save()

    user.requests.push(newRequest)
    thesi.requests.push(newRequest)

    await user.save()
    await thesi.save()

    res.status(201).json(user)

我通过我的组件中的服务调用它,如下所示:

this._usersService.addRequest(this.user, this.addRequestData, thesi).subscribe(
   res =>  ... )

而我的服务功能就是这个:

addRequest(user, request, thesi)
   const id = typeof user === 'string' ? user : user._id;
   const id2 = typeof thesi === 'string' ? thesi : thesi._id;
   const url = `$this._users/$id/$id2/requests`;
   return this.http.post<any>(url, request)

事情是这样的:

当我调用 addRequest 时,在 mlab 中请求按预期进行,但在网络中请求等待 2 分钟,然后它再次向 mlab 发送消息并发出双重 addRequest..

简单来说,我调用 addRequest 函数,它工作正常,但它会在 2 分钟后进入订阅块,并自动向服务器发送另一个请求。

这是完整的警告猫鼬味精:

(node:12555) UnhandledPromiseRejectionWarning: RangeError: 最大值 超出调用堆栈大小 在 RegExp.test()

.......

(node:12555) UnhandledPromiseRejectionWarning: 未处理的承诺 拒绝。此错误源于在异步内部抛出 在没有 catch 块的情况下运行,或者通过拒绝一个不是 用 .catch() 处理。 (拒绝编号:2)

【问题讨论】:

您能分享您的RequestThesiUser 模型吗? newRequest.user 只是 id,是整个 user 对象吗?也许某处有一个循环。 【参考方案1】:

好的..所以问题就在这里:

newRequest.user = user
newRequest.thesi = thesi

我不知道原因,但是当我删除这两行时,它可以正常工作。

如果有人知道为什么随时分享:)

【讨论】:

以上是关于猫鼬:UnhandledPromiseRejectionWarning:RangeError:超出最大调用堆栈大小的主要内容,如果未能解决你的问题,请参考以下文章

将猫鼬查询结果存储在另一个猫鼬查询中

带有打字稿的猫鼬,来自猫鼬的错误“连接”

猫鼬 |如何从此猫鼬模式中删除重复错误[重复]

如何在猫鼬模式验证器中获取猫鼬会话

如何使用猫鼬需要验证在猫鼬中插入多个文档?

为啥需要猫鼬填充?