首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图将http请求链接在一起,并将最终输出作为可观察的输出返回。

试图将http请求链接在一起,并将最终输出作为可观察的输出返回。
EN

Stack Overflow用户
提问于 2021-11-01 19:29:26
回答 1查看 63关注 0票数 1

当我在打字稿上工作的时候,我遇到了一些问题,把可观察到的东西链接在一起,这样就有意义了。因此,在这个示例中,我编写了一个条件,它将取决于它的值,或者执行一个函数,或者在执行函数之前做一些预处理。

在这样做的时候,我注意到问题区域试图返回一个Observable<Observable<number>>,这不是我想要的。我的想法是返回内在的价值,但我不知道如何真正处理这个问题。

代码语言:javascript
运行
复制
b(data: number): Observable<number> { return of(data); }  // This is a stub.
a(data: number): Observable<number> {

  const fn = (x): Observable<number> => {
    return of(x)  // this is a stub which would be the result of an http request.
  }

  if(data < 3) {
    return fn(data);
  } else {
    return b(data).pipe(map( x => fn(x) )) // Problem line
  }
}

这应该如何处理呢?我在想,也许有一种方法可以使用承诺来处理这个问题,但我认为这会扰乱函数签名,因为我需要将它们标记为异步。我很困惑,希望得到一些指导。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-01 21:44:30

问题是,一个条件返回一个可观测的条件,而另一个条件返回一个可观察的条件。您应该使用一个扁平化操作符,例如switchMap、concatMap或mergeMap。

代码语言:javascript
运行
复制
return b(data).pipe(switchMap(x => fn(x)))

也许这也能从重新设计中受益?相反,有两个单独的返回,创建一个流从条件语句的结果管道它到函数。这样,您就不必定义一个函数,这样您就可以在两个地方使用它。

代码语言:javascript
运行
复制
b(data: number): Observable<number> { return of(data); }  // This is a stub.
a(data: number): Observable<number> {
  const src$ = data < 3 ? of(data) : b(data);
  return src$.pipe(switchMap(x => of(x) /* your stub function */));
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69801888

复制
相关文章

相似问题

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