flatMap不能按预期的方式调用

时间:2019-07-06 19:51:51

标签: angular typescript rxjs flatmap

使用带有打字稿的rxjs observables组织呼叫链的问题

我是RXJS的新手,在我的打字稿代码中组织调用链时遇到一些麻烦。 问题是-如何制作此商品。http.get('http://www.gooogle.com'); 只打一次电话。这段代码不是真实的,只是复制的最小情况

import {Injectable} from '@angular/core';
import {flatMap, map} from 'rxjs/operators';
import {Observable, from} from 'rxjs';
import {HttpClient} from '@angular/common/http';

@Injectable()
export class CoolService {

  constructor(private http: HttpClient) {}
  x(): Observable<Object> {
    return from(Promise.resolve({a: {b: 'c'}})).pipe(
      flatMap((x) => {
        console.log(x);
        return this.http.get('http://www.gooogle.com');
      }), map((res) => {
        console.log(res);
        return res;
      }));
  }
}


1 个答案:

答案 0 :(得分:0)

原因是我对rxjs运算符的工作原理不了解。所有运营商都在为每个订阅进行工作,但我认为它正在为所有订阅进行一次计算。因此,我在服务中进行了一系列调用,并在不同的位置订阅响应-因此,操作员在代码中的运行与订阅一样多,所以我需要重建