如何修改从可观察对象获取的数据?

时间:2019-05-17 07:40:28

标签: angular7

我想从api(具有各种信息的电影列表)中获取数据。我对可观测对象还很陌生,并且一直感到困惑。因此,我要实现的是将基本路径与发帖人路径(我从api获取)连接起来,然后检索发帖人以在视图中显示。

我能够从api中获取电影的名称,但无法将基本URL连接到海报路径。非常感谢您对如何使用可观察物提供帮助或指导。

我用来获取数据的服务

dfAvg_Volume_RFQ = dfSpecific_Client_Avg_Volume_RFQ.groupby(
    ['Client', 'currency', 'sales_person_name2']).agg({'state': 'size',
                                                       'Quantity': 'mean',
                                                       'Quantity_CAD': 'mean'}).reset_index()

我想了解如何处理通过可观察对象获取的数据。

2 个答案:

答案 0 :(得分:1)

据我了解,您正在寻找rxjs运算符,特别是“转换”运算符,位于: https://www.learnrxjs.io/operators/transformation/

这样,您就可以随时随地观察Observable发出的数据。

假设IMovie的结构如下所示,应该可以使您走上正轨。

getmovies(): Observable<{connectedURL: string}[]> {
    return this.http.get<IMovie[]>(this._url).pipe(
       map( (movies:IMovie[]) => {
           result = [];
           movies.forEach( (movie) => {
              result.push(movie.getBaseURL() + movie.getPosterURL());
           }
           return result;
       })
    );
  }

所有这些操作就是获取电影数组,并使用连接的URL创建一个新数组。 因此,您的getMovies()返回修改后的列表。 当然,您可以在逻辑中的其他位置执行map()-Operator,甚至可以使用IMovie []的信息创建其他类型的对象。

我希望这对您有帮助。

从Observables和Operators开始是一件大事,因此您必须明确地检查上面的链接。

随时纠正我:)

答案 1 :(得分:0)

Concat 从两个或多个可观测对象发出的发射而没有相互交织1

Concat运算符将多个Observable的输出连接起来,以便它们像一个Observable一样工作,第一个Observable发出的所有项目都在第二个Observable发出的所有项目之前发出(依此类推,如果有的话)超过两个)。

Concat等待订阅您传递给它的每个其他Observable,直到上一个Observable完成。请注意,因此,如果您尝试连接一个“热” Observable,即一个立即开始且在订阅之前就开始发射项目的对象,Concat将不会看到,因此也不会发射该Observable之前发射的任何项目。所有以前的Observable均已完成,并且Concat订阅了“热门” Observable。

RxJs 的Concat示例为:

示例1:具有三个可观察对象的基本concat用法

// RxJS v6+
import { of, concat } from 'rxjs';

concat(
  of(1, 2, 3),
  // subscribed after first completes
  of(4, 5, 6),
  // subscribed after second completes
  of(7, 8, 9)
)
  // log: 1, 2, 3, 4, 5, 6, 7, 8, 9
  .subscribe(console.log);

示例2:可观察到延迟的连续信号

// RxJS v6+
import { of, concat } from 'rxjs';
import { delay } from 'rxjs/operators';

concat(
  of(1, 2, 3).pipe(delay(3000)),
  // after 3s, the first observable will complete and subsquent observable subscribed with values emitted
  of(4, 5, 6)
)
  // log: 1,2,3,4,5,6
  .subscribe(console.log);