首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否有用于创建/处理HTTP流的RXJS标准?

是否有用于创建/处理HTTP流的RXJS标准?
EN

Stack Overflow用户
提问于 2019-03-21 03:24:51
回答 1查看 60关注 0票数 0

简单地说,我经常遇到RXJS的障碍,因为几乎每个示例都依赖于恒定的数据流,而我发出的HTTP请求本质上是单一的。

我的常见场景是:我有一个服务,它进行API调用并更新必要的使用者。在我的脑海中,它就像是简单的事件发射。订阅者连接并等待事件-一旦他们得到它,他们就离开并分别做他们自己的事情。

问题是,我相信您知道,HTTP订阅在完成后立即终止,“连接”会立即触发它。这是一个我仍然难以理解的RXJS概念。

因此,当你加入对方法的并发调用时,消费者依赖于其他消费者,forkjoin和异步地狱-我尝试了涉及主题,回放,共享地图的各种令人厌恶的东西。我最终决定这样做:

代码语言:javascript
复制
myBehaviorSubject = new BehaviorSubject<Result>(null);
myBehaviorSubject$ = myBehaviorSubject.asObservable()
...
getData(params): Observable<Result[]> {
      const http$ = this.httpClient
        .get('blah', {params})
        .pipe(map(response => response as Result[]));

      http$.subscribe(result: Result => {
         myBehaviorSubject.next(result);
      });

      return myBehaviorSubject$;
    }

It feels...wrong。我知道像mergeMap这样的东西处理内部订阅的方式是类似的,更高阶的观察量也不是反模式的,但我不禁认为我只是做错了。

内部订阅真的是做到这一点的方法吗?有没有办法让消费者在不对服务器进行多余调用的情况下等待HTTP请求?

有没有人能说明一下这件事?

EN

回答 1

Stack Overflow用户

发布于 2019-03-21 03:58:28

我违反了http请求的规范。对我来说,它们不是流。

代码语言:javascript
复制
async getData(params): Promise<Result[]> {
    return this.httpClient
        .get('blah', {params})
        .toPromise();       
}

或者:

代码语言:javascript
复制
async loadComplexViewModelData(params): Promise<{[dataA, dataB, dataC]}> {    
  [dataA, dataB, dataC] = await Promise.all([
    this.httpClient
      .get('blahA', {params})
      .toPromise();
    this.httpClient
      .get('blahB', {params})
       .toPromise();
    this.httpClient
      .get('blahC', {params})
      .toPromise();
  ]);      
}

上面不包括错误处理或嵌套..也许request blahB会返回你需要获取的键。向toPromise()追加一条then()语句。

这是一种与流行模式相反的替代方案,并且没有具体回答指定的问题。

这也是我解决"It feels...wrong“delima的方法。我不认为rxjs是适合这项工作的工具,我是少数:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55268729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档