javascript - 返回一个常规数组而不是 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[]>。
请指教,谢谢。
解决方案
您必须 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()
推荐阅读
- jenkins - 如何同时运行两个 Jenkins 多阶段作业?
- r - 受试者的一次观察与下一次观察之间的变量差异 (R)
- ruby - 哈希删除项目键和值
- hyperledger-fabric - 由于错误“没有背书组合...”,无法通过 fabric-sdk-go 查询 BYFN
- sympy - SymPy 可以打印指数基数和指数吗?
- c++ - C ++在另一个函数中以连续顺序一次使用来自'for'循环的一系列值
- javascript - 如何正确检查推送通知的权限?
- .net-core - 注册名为 logger .NET Core 服务提供者的 log4net
- java - 是否可以使用HashMap
在多线程应用程序中? - asp.net-mvc - ASP.NET MVC - 复选框列表未返回所有逗号分隔值