【问题标题】:rxjs: subscribing to observable in maprxjs:订阅地图中的可观察对象
【发布时间】:2021-02-17 14:31:30
【问题描述】:

我的第一个 observable 返回一个 Persons 数组。我想用第二个可观察的客户列表更新该数组的每个人。我怎么做?到目前为止,我有这个:

const json: Person[] = [new Person('Alice'), new Person('Bob')];

const resultsObservable = new Observable<string[]>(subscriber => {

  setTimeout(() => {
    subscriber.next(['Client1', 'Client2', 'Client3']);
    subscriber.complete();
  }, 1000);
});

of(json).pipe(
  switchMap( dataArray => {
    return from(dataArray);
  }),
  map((x: Person) => {
    resultsObservable.subscribe(r => {
      x.clients = r;
    });
    return x;
  }),
).subscribe(value => {
    console.log(value);
});

}

人:

export class Person{
  name: string;
  clients?: string[];

  constructor(name: string) {
    this.name = name;
  }
}

但问题是返回发生在设置值之前,因此 person.clients 的最终值是未定义的。我该如何解决?或者有什么更好的方法来实现我想要做的事情?

【问题讨论】:

    标签: rxjs rxjs-observables rxjs-pipeable-operators


    【解决方案1】:

    好的,我想我找到了我要找的东西:

        const result = persons.pipe(
          mergeMap(p => resultsObservable.pipe(map(clients => {
            p.clients = clients;
            return p;
          }))),
        );
        result.subscribe(p => console.log(p));
    

    【讨论】:

    • 这不是很重要,但clients =&gt; ({...p, clients}) 是一种更短、更具声明性的方式来编写映射函数。 :)
    猜你喜欢
    • 2018-07-28
    • 2022-10-17
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多