【发布时间】: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对象吗?也许某处有一个循环。
标签: angular mongoose promise angular-promise