【发布时间】:2017-08-08 19:31:38
【问题描述】:
我正处于尝试为我的 http 服务创建客户端的 Angular 4 项目的早期阶段。这些服务可以返回以下两种情况之一:
- http 状态为 200 的服务的实际所需 json 响应,或
- 代表作业令牌的 guid,我可以使用它轮询长期运行作业的状态和 202 的 http 状态。
当服务返回 200 状态时,我想直接返回它的 json 内容,这样就很简单了。
当结果状态为 202 时,我想使用该令牌轮询一个单独的 url 并接收一个带有状态信息的 json 对象。当该状态信息指示完成时,我想向将返回输出的最终 url 发出请求。
我不确定如何处理请求中所需的条件逻辑。我怀疑我可以使用repeatWhen 来监控轮询请求的结果,但我无法弄清楚如何使用它。
http.request('/some/longrunning/job')
.flatMap((resp: Response) => {
if (resp.status !== 202)
return Observable.of(resp);
var job_token = resp.json().token;
return http.get('/jobstatus/' + job_token)
// result from this endpoint is a json object that looks something
// like { status: 'running' } or { status: 'complete' }
.repeatWhen(function (polling_resp: Observable<Response>) {
// How do I use polling_resp here to look at my http response?
// Do I need to explicitly subscribe to it? And if so,
// how then do I inspect the response and return the
// appropriate value to indicate whether or not to
// resubscribe via the repeatWhen?
});
});
有人可以给我一些关于如何在repeatWhen 中使用逻辑的提示吗?我还没有看到任何使用 observable 本身的内容来决定是否重新订阅的示例。
【问题讨论】:
标签: angular rxjs observable