猫鼬: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)
【问题讨论】:
您能分享您的Request
、Thesi
和User
模型吗? newRequest.user
只是 id,是整个 user
对象吗?也许某处有一个循环。
【参考方案1】:
好的..所以问题就在这里:
newRequest.user = user
newRequest.thesi = thesi
我不知道原因,但是当我删除这两行时,它可以正常工作。
如果有人知道为什么随时分享:)
【讨论】:
以上是关于猫鼬:UnhandledPromiseRejectionWarning:RangeError:超出最大调用堆栈大小的主要内容,如果未能解决你的问题,请参考以下文章