一般而言,我有一个父母"产生价值的可观察物,然后我有任意数量的儿童"根据来自"父母"的最后给定值生成自己的值流的可观察量。我需要这些儿童可观察到的可以取消"以这种方式,他们停止产生价值,而他们的兄弟姐妹欢快地前进。通过对子观察的操作创建的任何可观察量应该被取消"同样。取消应该包括释放儿童可观察的(以及它的孩子)所使用的记忆。
更具体地说,我正在使用Web Audio API。父观察产生AnalyserNode
s。通过在switchMap()
可观察对象上调用AnalyserNode
来创建子可观察对象。 switchMap
返回的可观察对象是一个新的Observable.interval
,它会从AnalyserNode
生成fft帧。
我们的想法是能够任意创建和销毁由同一FftFrame
AnalyserNode
个流
let fftSpec = {interval: 100};
let fftFrame$ = analyserNode$.switchMap((analyser: AnalyserNode) => {
let fftFrame = new Uint8Array(analyser.frequencyBinCount);
return Observable
.interval(fftSpec.interval)
.map(() => {
analyser.getByteFrequencyData(fftFrame);
let copy = new UintArray(analyser.frequencyBinCount);
copy.set(fftFrame);
return copy;
});
});