【问题标题】:rxjs 6 - Observable<Array(Objects)> to Observable<Objects>rxjs 6 - Observable<Array(Objects)> 到 Observable<Objects>
【发布时间】:2018-11-09 08:26:08
【问题描述】:

我有一个可观察对象,它发出一组对象。我需要使用哪些管道操作符将其转换为 Observable 以便我可以对每个对象进行操作?

我需要对 obs$ 做什么才能使其像 obs2$ 一样发出?

const obs$ = of([{ opponent: 'Walton', team: 'varsity', gametime: new Date() },
{ opponent: 'Scott', team: 'varsity', gametime: new Date() },
{ opponent: 'Dixie', team: 'varsity', gametime: new Date() },
{ opponent: 'Highlands', team: 'freshmen', gametime: new Date() }])
  .pipe(
    tap(console.log)
  );

obs$.subscribe(a =>
  console.log(a)
);

const obs2$ = of({ opponent: 'Walton', team: 'varsity', gametime: new Date() },
  { opponent: 'Scott', team: 'varsity', gametime: new Date() },
  { opponent: 'Dixie', team: 'varsity', gametime: new Date() },
  { opponent: 'Highlands', team: 'freshmen', gametime: new Date() })
  .pipe(
    tap(console.log)
  );

obs2$.subscribe(a =>
  console.log(a)
);

【问题讨论】:

    标签: typescript rxjs observable rxjs6


    【解决方案1】:

    感谢您的提问!我不知道它仍然是真实的,但我想回答。我认为源 Observable 无法更改。因此,我们希望将数组转换为项目的 Observable。正如已经提到的,from() 运算符在这里可以提供帮助,因为它接受一个值数组并将它们作为 observable 的值发出。

    因此,解决此问题的一种一次性方法是创建一个管道pipe(switchMap(from)),它将对我们有所帮助。但是,我想为未来的开发人员创建一个可重复使用的解决方案。类似toStream() 运算符的东西,里面有相同的代码。你当然可以改名字!

    这里有一些关于我的解决方案的链接:

    附:请对答案留下一些反馈,这样我们可以改善社区并激励其他人帮助我们。祝你有美好的一天。我希望这个答案有用。

    【讨论】:

      【解决方案2】:

      只需使用from observable :

      import {Observable, from } from 'rxjs';
      // Write TypeScript code!
      
      const myDatas = [{ opponent: 'Walton', team: 'varsity', gametime: new Date() },
      { opponent: 'Scott', team: 'varsity', gametime: new Date() },
      { opponent: 'Dixie', team: 'varsity', gametime: new Date() },
      { opponent: 'Highlands', team: 'freshmen', gametime: new Date() }];
      
      from(myDatas).subscribe(e => console.log(e));
      

      live sample

      【讨论】:

        【解决方案3】:

        你需要mergeAll:

        of([2, 3, 4]).pipe(
          mergeAll()
        ).subscribe(v => console.log(v));
        // outputs 2, 3, 4
        

        如果你使用from,它也可以工作:

        from([2, 3, 4])
          .subscribe(v => console.log(v));
        // outputs 2, 3, 4
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多