rxjs - rxjs 收集 Subject 发送的值,然后将过去的值作为数组发送
问题描述
rxjs 收集 Subject 发送的值,然后将过去的值作为数组发送
import { Subject } from "rxjs";
const list$ = new Subject<number>();
list$
.pipe(/* Which pipeline should I use to achieve the following log information */)
.subscribe(console.log);
list$.next(1); // log: [1]
list$.next(2); // log: [1,2]
解决方案
在 RxJS.pipe()
中,您可以列出一系列运算符。每个运算符都是一个纯函数,它接收前一个可观察对象(或运算符)发出的值,并为下一个运算符返回一个新值。
由于运营商提供的实用程序,订阅方法可以保持相当简单,或者完全为空。
鉴于您将每个发出的值转换为数组的要求,我建议使用scan()
运算符。与 类似Array.reduce()
,该scan()
运算符为您提供了一个汇总值,您可以将其添加到来自可观察源(在本例中为您的主题)的每个发射中。
const list = new Subject<number>();
list.pipe(
scan((numArray, number)=>
[...numArray, number], [] as number[]
)
).subscribe(numArray=>console.log(numArray));
list.next(1); // [1]
list.next(2); // [1,2]
我没有包含$
在变量名中的原因是,这通常只保留给公共可观察对象(不是主题或订阅,它们不应该暴露给其他类/模块/文件)。
推荐阅读
- python - 我无法访问另一个类中的变量
- c# - 复制的样式为空。改用 StyleNotFound
- twitter-bootstrap - 使用 Bootstrap 4 Flexbox 居中导航项目
- playback - 私有 Android 应用程序未显示在托管 Android Google Play 中
- r - 为什么 dnorm() 不返回我在执行 sd(dnorm()) 时输入的标准差?
- python - 使用kivy和python制作android apk时如何使用request之类的模块?
- mongodb - Stitch Facebook 身份验证返回“AuthError”
- python - 如何将列表中的字符串连接到字符串所引用的对象
- android - 如何在 Rider IDE 中为 Xamarin Android 应用程序设置可绘制资源文件夹
- python - 使用 pip 在 Windows 上安装 pyaudio 模块