首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Akavache中订阅新的价值?

如何在Akavache中订阅新的价值?
EN

Stack Overflow用户
提问于 2018-12-01 19:24:31
回答 2查看 332关注 0票数 1

我使用Akavache的GetAndFetchLatest方法,并创建了依赖服务来与Akavache的方法进行通信。当我直接引用时,我正在成功地从服务层调用akavache。供订阅

代码语言:javascript
复制
  MyMod result = null;
                var cache = BlobCache.LocalMachine;
                var cachedPostsPromise = cache.GetAndFetchLatest(
                    "mykey",
                    () => GetInfo(),
                    offset =>
                    {
                      //some condition
                    });

                    cachedPostsPromise.Subscribe(subscribedPosts => {
                        Device.BeginInvokeOnMainThread(() =>
                        {
                           //do sothing.

                        });
                });

                result = await cachedPostsPromise.FirstOrDefaultAsync();
                return result;

它是如何在具有接口/依赖服务的服务层上调用works.But的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-17 18:13:05

请查找示例代码:

代码语言:javascript
复制
var result = BlobCache.LocalMachine;
            var cachedPostsPromise = cache.GetAndFetchLatest(
                "mykey",
                () => ViewModelLocator.GetInstance<IYourServiceName>().MethodName(),
                offset =>
                {
                  //some condition
                });

                cachedPostsPromise.Subscribe(subscribedPosts => {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                       //Your piece of code

                    });
            });

            result = await cachedPostsPromise.FirstOrDefaultAsync();
            return result;

请注意,订阅的任何内容都将被调用两次:第一组数据将缓存,第二组数据将从server.You中新获取,必须根据需要进行管理。

票数 0
EN

Stack Overflow用户

发布于 2019-02-08 10:25:57

我认为你对反应式编程还是新手。理解基本原则有助于使用Akavache。也许这个介绍能帮上忙。

要回答您的问题,请将这样的代码放在“存储库”类中:

代码语言:javascript
复制
public override IObservable<MyClass> Get(string key)
{
    var cachedObservable = blobCache.GetAndFetchLatest<MyClass>(key,
        () => GetFromServerAsync(key));
    return cachedObservable ;
}

打电话的人:

代码语言:javascript
复制
private void getNewData()
{
    var myClassObservable = myRepository.Get("the key");
    myClassObservable.Subscribe(handleNewMyClass);
}

private void handleNewMyClass(MyClass newClass)
{
    //handle the new class
}

注意,handleNewMyClass()被调用了两次:

  1. 首先使用缓存中的MyClass
  2. 然后使用(从服务器)获取的MyClass

使用这种方法,您可以简单地将存储库类放置在IoC容器中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53574294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档