Typescript 测试可观测数据的输出

Typescript 测试可观测数据的输出,typescript,design-patterns,rxjs-observables,Typescript,Design Patterns,Rxjs Observables,在观察到的东西周围我的头有困难。我有以下资料: const check = this.http.get(myUrl); const check = this.http.get(myUrl); const mapResponse = map(response => { ...format data into JSON structure... return jsonResponse; }); mapResponse(check).subscribe(result =>

在观察到的东西周围我的头有困难。我有以下资料:

const check = this.http.get(myUrl);
const check = this.http.get(myUrl);
const mapResponse = map(response => {
    ...format data into JSON structure...
    return jsonResponse;
});
mapResponse(check).subscribe(result => {
  if (result['url']) {
      return result;
  } else {
      return this.http.get(myOtherUrl);
  }
});
这将返回JSON数据。我想测试JSON数据中是否存在“url”字段。如果没有,我想查询第二个URL。(假设API是固定的,需要两个调用,因为事实上就是这样。)

问题是我不知道怎么做。如果
check
只是JSON(并且没有可观察到的内容),这将是微不足道的:

if(check.url) {
    return check;
} else {
    return this.http.get(myOtherUrl);
}
这显然不起作用,因为我无法直接检查URL属性。阅读上的页面,我写了以下内容:

const check = this.http.get(myUrl);
const check = this.http.get(myUrl);
const mapResponse = map(response => {
    ...format data into JSON structure...
    return jsonResponse;
});
mapResponse(check).subscribe(result => {
  if (result['url']) {
      return result;
  } else {
      return this.http.get(myOtherUrl);
  }
});

这看起来非常尴尬,因为为了使用第二个
get
,我必须在lambda函数中复制代码。不确定如何访问第二次
http
调用的结果,以实际使用它。我是否应该再次嵌套整个内容?

当我发布时,我注意到了,但不确定这是否是我在这里寻找的答案。您认为从订阅回调返回值有什么作用?很抱歉,返回值不应该在那里。已编辑。你需要订阅
this.http.get(myOtherUrl)
observable,是的嵌套在里面,我不知道你为什么不想这样做。你需要链接你的调用,我不知道确切的语法,但大致是
this.http.get(myUrl).pipe(flatMap(response)=>response.url?response:this.http.get(myOtherUrl);)
根据第一个调用是否具有
url
属性,它应该为第一个或第二个请求返回一个可观察的。看见