角:从forkJoin返回的值在其他可观察到的管道内

这是我需要实现的方案:

  1. 我调用一个API,该API返回带有对象数组的响应
  2. 我将那些对象映射到另一个对象数组
  3. 对于此新对象数组的每个项目,我需要调用另一个API调用
  4. 第二次调用的响应必须在2中创建的数组的每个对象中设置一个值。
  5. 我想从4返回一个对象数组的observable。

到目前为止,我已经能够创建以下内容:

public getWishlist ( receiver : Person) : Observable<Wish[]>{
    return this.http$.get<IWishlistResponse[]>(environment.apiUrl + 'wishlist/' + receiver.id).pipe(
      map( (response) => {
        let wishes: Wish[] = [];
        response[0].wishes.forEach((wish) => {
          wishes.push(new Wish(
            wish._id,
            wish.title,
            wish.price,
            null,
            wish.url
          ));
        });
        return wishes;
      }),
      tap( (wishes) => {
        let wishStateObservables = wishes.map(wish => this.http$.get<wishStatus>(environment.apiUrl + 'wish/' + wish.id + '/state').pipe(catchError(() => of(null))));
        forkJoin(wishStateObservables)
          .pipe(
            map(states => {
              states.forEach((state, index) => {
                wishes[index].status = state;
              });
              return wishes;
            })
          ).subscribe((wishes => { console.log(wishes) }));
      })
    );

在console.log中,forkjoin的订阅中的“愿望”是我想在可观察对象中返回的值,但是我无法在此可观察对象中获取它们。因此,我应该使用什么代替“ tap”运算符。才能将forkJoin管道的结果放入可观察到的返回值中?

阿里F50

尝试将tapfor切换为,将switchMap其切换为新的可观察值。

import { switchMap } from 'rxjs/operators';
...
public getWishlist ( receiver : Person) : Observable<Wish[]>{
    return this.http$.get<IWishlistResponse[]>(environment.apiUrl + 'wishlist/' + receiver.id).pipe(
      map( (response) => {
        let wishes: Wish[] = [];
        response[0].wishes.forEach((wish) => {
          wishes.push(new Wish(
            wish._id,
            wish.title,
            wish.price,
            null,
            wish.url
          ));
        });
        return wishes;
      }),
      switchMap( (wishes) => { // change to switchMap to switch to new observable
        let wishStateObservables = wishes.map(wish => this.http$.get<wishStatus>(environment.apiUrl + 'wish/' + wish.id + '/state').pipe(catchError(() => of(null))));
        return forkJoin(wishStateObservables); // add return here to return for the switchMap
      }),
      map(states => { // remove the inner pipe from the forkJoin and put the pipe in outer pipe
              states.forEach((state, index) => {
                wishes[index].status = state;
              });
              return wishes;
      }),
    );

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

管道RxJS可观察到的现有主题

模板中的异步管道可观察到的值不适用于单个值

返回可观察到的内部可观察到的可激活Angular 4防护

角5-可观察到的返回错误无法读取未定义的属性

RxJs可观察到的重复值

与其他组件或服务共享可观察到的东西

可观察到的异步管道未返回值

通过异步管道重新分配可观察到的

如何根据可观察到的返回值对演示者方法进行单元测试?

异步管道未显示可观察到的数据

Angular管道内可观察到的HTML过滤请求

将Flowables <Item>转换为Flowable <List <Item >>或其他可观察到的

从异步函数返回可观察到的

使用RxJS过滤单个值并返回可观察到的值,并通过Angular模板中的async使用可观察到的值

RXJS可观察到的删除管道运算符

使用if / else语句返回可观察到的值不适用于RxSwift flatMap

获取可观察到的返回值,而无需订阅调用类

rxjs如何在角度服务中一起返回可观察到的值

保持可观察到的错误并返回所有值

rxjs-缓冲发出的值,直到其他可观察到的发出,然后照常发出

如何在Angular Jasmine Spec中测试主题和可观察到的返回值?

取消先前从其他函数返回的可观察值

返回可观察到的延期

其他功能中可观察到的敲除/ JS引用

在RxJava中,在其他线程上订阅时,可以压缩的可观察到的值可以返回到主线程吗?

可观察到可观察的顺序

angular2 rxjs可观察到的forkjoin

RxJs。如果它最近被触发,如何等待其他可观察到的东西

从 eventListener 可观察到的角度返回