rxjs 6 - Observable <array(objects)>到Observable <objects>

时间:2018-05-30 13:00:59

标签: rxjs observable rxjs6

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

我需要做些什么来阻止$让它像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)
);

3 个答案:

答案 0 :(得分:2)

您需要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

答案 1 :(得分: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

答案 2 :(得分:0)

谢谢您的提问!我不是真的,但我想回答。我认为源Observable无法更改。因此,我们要将数组转换为可观察项。如前所述,from()运算符可以在这里提供帮助,因为它需要一个值数组并将其作为可观察值的值发出。

因此,解决此问题的一种一次性方法是创建一个对我们有帮助的管道pipe(switchMap(from))。但是,我想为将来的开发人员创建一个 可重用的解决方案 。像toStream()这样的运算符,内部具有相同的代码。您可以更改课程名称!

以下是有关我的解决方案的链接:

P.S。请通过这种方式留下一些反馈意见,这样我们可以改善社区并激发他人的帮助。祝你有美好的一天。我希望这个答案是有用的。