首页 > 解决方案 > 返回一个常规数组而不是 Observable在 RxJS 中

问题描述

可观察的新手。如何从此函数返回常规数组而不是 observable?

removeRewards(userId: string): string[] {
  return this.getUsedRewards(userId).pipe(
  switchMap(rewards => rewards.filter(reward => reward.active)),
  map(reward => reward.rewardId),
  toArray()
  );
}

getUsedRewards 返回一个 Observable。我在另一个函数中调用 removeRewards,只需要它返回 string[] 而不是 Observable<string[]>。

请指教,谢谢。

标签: javascriptarraysrxjsobservable

解决方案


您必须 END 流然后使用toArray()来实现您的目标您可以查看此示例

“当间隔完成时,将间隔发出的值作为数组获取”

// RxJS v6+
import { interval } from 'rxjs';
import { toArray, take } from 'rxjs/operators';

interval(100)
  .pipe(take(10), toArray())
  .subscribe(console.log);

// output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

所以你可以做类似的事情:

removeRewards(userId: string): string[] {
  return this.getUsedRewards(userId).pipe(
  switchMap(rewards => rewards.filter(reward => reward.active)),
  map(reward => reward.rewardId),
  take(1), // <-- ADD THIS LINE
  toArray()
  );
}

也可能的运算符是first()


推荐阅读