4

我有一个发出对象数组的可观察对象。我需要使用哪些管道操作符将其转换为 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)
);
4

3 回答 3

4

你需要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
于 2018-05-30T13:34:41.793 回答
2

只需使用from可观察的:

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));

现场样品

于 2018-05-30T13:37:31.400 回答
2

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

因此,解决此问题的一种一次性方法是创建一个pipe(switchMap(from))可以帮助我们的管道。但是,我想为未来的开发人员创建一个可重用的解决方案。类似toStream()操作员的东西,里面有相同的代码。您当然可以更改名称!

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

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

于 2019-11-03T10:59:17.087 回答