快速上下文:我正在显示“实时”图像幻灯片,这意味着在显示图像时,用户可以上传图像并且这些新图像应该显示(最终)。这是“无限的”,这意味着一旦发出所有图像,我想从第一张图像重新开始。新传入的图像应该排在队列的末尾并在我循环回它们时发出。
我想出了一个我认为是肮脏和不正确的解决方案,归结为:
const srcArray = [-2, -1];
const userImageUpload$ = interval(2000).pipe(
tap((val) => srcArray.push(val))
).subscribe();
const liveImages$ = zip(interval(1000), from(srcArray)).pipe(
map(([a, b]) => b),
repeat()
).subscribe((val) => console.log("Image " + val));
这里我们有一些“图像”的起始数组。userImageUpload$代表新图像传入的想法。当我得到一个时,我将它推入起始数组。liveImages$表示我想要发出的值。这在技术上是可行的,但是改变这个共享的全局数组感觉很糟糕,并且可能会导致问题。是否有一个很好的解决方案可以将这一切合二为一,可能使用主题?我很难想出一个解决方案。