2017-02-16 9 views
0

私は現在、Webサービスに呼び出すことで、ビューモデルにデータをフェッチしています:反応拡張機能/ UIキャッシュのWeb要求データ

_loadDataCommand = ReactiveCommand.CreateFromObservable(
     () => Observable 
      .StartAsync(ct => _getAllFunction(ct)) 
      .TakeUntil(_loadDataCancel)); 

_loadDataCancelは、キャンセル信号として動作するだけでIObservable<bool>です。

現在、VMをナビゲートするとload dataコマンドが実行されるようになっています。

これは、特に高価なフェッチ操作、またはユーザーが離れて移動してビューを残した状態(リスト内の選択された項目など)に戻ろうとするときに問題になります。

:私は本当にやることができるようにしたいどのような

は、コマンドは常にフェッチが、私は、私はNAV-へ上利用することができます追加、観察を持ちたい、どのだろうフレッシュを実行するようにそれを持っています

  1. いくつかの研究は、のようなものを中心にぞんざいな情報を上げ

データが存在しない場合に観察loaddataのを使用します(キャッシュに挿入)は、本
  • 場合は、キャッシュからデータを取得しますしかしとMemoizeAll()は、rxでは使用できないようです(System.Interactiveにあります)。

    ここで検索すると、https://stackoverflow.com/a/12666462/639771が返ってきましたが、ReactiveUIのマスターソースを見た後、私はもはやObservableAsyncMRUCacheを見つけることができません。

    紛失しているものがありますか?私はほとんどそれが自明であることが判明すると確信していますが、私は完全に迷っています。

    PS:私はAkavacheが存在することを認識していますが、私のニーズが少し重すぎるかもしれません。

  • 答えて

    2

    もっと多くの要因に応じてこれを達成するにはいくつかの方法があるように感じますが、これは基本的にあなたが望むものですか?

    IObservable<Object> GetFromServer() 
    { 
         //Get From Server 
         //Store in Cache 
    } 
    IObservable<Object> GetFromCache() 
    { 
         return //returns something from cache or just return null; 
    } 
    ... 
    GetFromCache() 
    .SelectMany(result => 
        { 
         if (result == null) 
          return GetFromServer(); 
    
    
         return Observable.Return(result); 
        }); 
    

    あなただけでは接続され、観察を作成することができますたとえば、あなたが観測の一部として結果を保存することができますがそれは一種の実装あなたは...キャッシュを期限切れに欠けているかに依存していますかのバリエーションがあるだけサーバーを一度呼び出してから、結果を任意の加入者に再生するだけです。

    GetFromServer() 
        .Replay(1); 
    
    関連する問題