【问题标题】:Mongoose: UnhandledPromiseRejectionWarning: RangeError: Maximum call stack size exceeded猫鼬:UnhandledPromiseRejectionWarning:RangeError:超出最大调用堆栈大小
【发布时间】: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 对象吗?也许某处有一个循环。

标签: angular mongoose promise angular-promise


【解决方案1】:

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

newRequest.user = user
newRequest.thesi = thesi

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

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

【讨论】:

    猜你喜欢
    • 2014-08-29
    • 2021-09-30
    • 2016-04-22
    • 1970-01-01
    • 2015-10-24
    • 2015-12-29
    • 2017-12-27
    • 2020-12-06
    • 2018-02-06
    相关资源
    最近更新 更多