网页上的异步消息

时间:2016-08-31 09:38:25

标签: angular

我有一个有趣的问题要解决,但我被困住了。我有一个显示通知的组件。通知来自事件发射器。我想在特定的时间内显示每个通知,例如5秒,然后将其删除。

我的方法是将每个新通知放在一个数组中(显示在组件的模板中),使用Observable.timer设置一个计时器,并在5秒后将其删除。但是在阵列上会有两个异步访问添加和删除,因此索引不可靠。

有什么方法可以优雅地解决这个问题吗?

2 个答案:

答案 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]);
    })