как очистить «отдельный» оператор RxJS в Angular 2?

Есть ли способ очистить кэш Different()?

как видите, иногда я устанавливаю this.messages=[], в этот момент я хочу очистить кеш. Вместо этого я сделал хак, в котором я увеличил DifferentCount.

ngOnInit() {
    let saved = {}
    let distinctCount = 1000000000000
    let messageStream = this.route.params
            .map(params=>params['id'])
            .switchMap((id)=> {
                this.messages = []
                saved[this.id] = this.newMessage
                this.id = id
                distinctCount+=1000000000000
                this.newMessage = saved[id] || ''
                return Observable.interval(3500).startWith(0).switchMap(()=> {
                    let count = 5
                    if (this.messages.length == 0) {
                        count = 10
                    }
                    return this.conversationsApi.apiConversationsByConversationIdGetMessagesGet(this.id, this.authService.getAuth(), undefined, count, undefined, undefined, undefined)
                })
            })
            .concatMap((messages:Array<MessageModel>)=>{
                return Observable.from(messages.slice().reverse())
            })
            .distinct(message=>message.id+distinctCount)
}

person robert king    schedule 08.07.2017    source источник


Ответы (1)


в итоге у нас появилось хорошее решение, просто передайте this.route.params observable в качестве второго аргумента в Different().

второй аргумент — это наблюдаемая флешка, а кроме того, different сбрасывает свой кеш всякий раз, когда эта наблюдаемая испускает

поэтому всякий раз, когда пользователь перемещается между разговорами, кеш очищается.

    ngOnInit() {
            let saved = {}
            let messageStream = this.route.params
                    .map(params=>params['id'])
                    .switchMap((id)=> {
                        this.messages = []
                        saved[this.id] = this.newMessage
                        this.id = id
                        this.newMessage = saved[id] || ''
                        return Observable.interval(3500).startWith(0).switchMap(()=> {
                            let count = 5
                            if (this.messages.length == 0) {
                                count = 10
                            }
                            return this.conversationsApi.apiConversationsByConversationIdGetMessagesGet(this.id, this.authService.getAuth(), undefined, count, undefined, undefined, undefined)
                        })
                    })
                    .concatMap((messages:Array<MessageModel>)=>{
                        return Observable.from(messages.slice().reverse())
                    })
                    .distinct(message=>message.id, this.route.params)
}
person robert king    schedule 08.07.2017