我有一个有趣的问题要解决,但我被困住了。我有一个显示通知的组件。通知来自事件发射器。我想在特定的时间内显示每个通知,例如5秒,然后将其删除。
我的方法是将每个新通知放在一个数组中(显示在组件的模板中),使用Observable.timer设置一个计时器,并在5秒后将其删除。但是在阵列上会有两个异步访问添加和删除,因此索引不可靠。
有什么方法可以优雅地解决这个问题吗?
答案 0 :(得分:0)
通知是对象吗?如果是这样,您可以添加"时间"参数在里面。每隔一秒,一个Observable.timer将为每个"时间"添加1。表格中的通知属性。如果通知有一个"时间"属性大于5,它将被删除。
答案 1 :(得分:0)
你有正确的想法,我会使用地图而不是数组来插入和删除元素。这是一个适用于此的代码段:
const a = new EventEmitter<string>();
const notifications = {};
a.asObservable()
.flatMap((n, i) => {
notifications[i] = n;
return Observable.timer(5000)
.do(() => delete notifications[i]);
})