2017-07-08 35 views
3

有沒有辦法清除distinct()緩存?如何在Angular 2中清除「獨特」的RxJS操作符?

正如你所看到的,有時我設置this.messages = [],在這一點上,我想清除緩存。相反,我做了一個黑客,我增加了distinctCount。

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) 
} 

回答

3

結束有一個很好的解決了這個,即速this.route.params可觀察到的作爲第二個參數,以不同的()。

第二個參數是一個可觀察到的齊平的,不同的刷新其高速緩存每當觀察到的發射

所以每當用戶對話之間導航時,高速緩存刷新。

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) 
} 
相關問題