【发布时间】:2021-04-27 08:01:38
【问题描述】:
我试图在 nest doc example 之外更简单地在控制器中实现 @Sse(),但直到现在我才使用 rxjs,所以我有点困惑。
流程是:
- 客户端发送带有文件负载的
POST请求 - 服务器(希望)发回新创建的
project,并带有一个道具status:UPLOADED - 客户端订阅下面描述的 sse 路由作为参数传递它刚刚从服务器收到的
projectId - 与此同时,服务器是
doingSomeStuff,这可能需要 10 秒到一分钟。当doingSomeStuff完成时,db 中的项目状态从UPLOADED更新为PARSED
我需要 @Sse 修饰函数以 x 时间间隔执行“状态检查”并返回 project.status(当时可能已更新,也可能未更新)
我现在的代码:
@Sse('sse/:projectId')
sse(@Param('projectId') projectId: string): Observable<any> {
const projId$ = from(this.projectService.find(projectId)).pipe(
map((p) => ({
data: {
status: p.status,
},
})),
);
return interval(1000).pipe(switchMap(() => projId$));
}
我没有把服务代码放在这里,因为它是一个简单的mongooseModel.findById 包装器。
我的问题是返回的状态仍然是UPLOADED 并且永远不会更新。似乎承诺不会在每个滴答声中重新执行。如果我在我的服务中使用 console.log,我可以看到我的日志只打印一次,初始值为 project,而我希望在每次滴答时看到一个新日志。
【问题讨论】:
标签: rxjs nestjs server-sent-events