何时更新 Blazor WebAssembly 应用程序中的 IndexedDB 数据

问题描述 投票:0回答:1

我有一个 Blazor WebAssembly (PWA) 项目,带有单独的 ASP.NET api,用于访问存储在数据库中的产品数据。调用

/api/products/getAllProducts
端点需要几秒钟的时间,因为需要退货的产品相当多。该产品数据通过服务每天在服务器上更新一次。

产品数据需要存储以供客户端离线使用,因此我正在实现 IndexedDB 以用于本地产品存储。该代码有些未经测试,因为目前它仅位于产品页面的代码块中:

private IEnumerable<Product>? products;

protected override async Task OnInitializedAsync()
{
    // get products from the api
    products = await Http.GetFromJsonAsync<Product[]>("/api/products/GetAllProducts");


    // add products fetched from api into local storage
    using var db = await DbFactory.Create<IndexDb>();
    db.allProducts.Clear();
    foreach ( var product in products)
    {
        db.allProducts.Add(product);
    }
    await db.SaveChanges();


    // get products from local storage
    products = db.allProducts;
}

我的问题是,我什么时候应该从 api 调用刷新/重新填充本地 IndexedDB 产品列表,而不减慢/停止我的应用程序?在 blazor 应用程序启动时(这可能吗)?当他们打开包含所有产品的页面时?实际上,我只需要在他们当天第一次打开该产品数据时每天更新一次。

c# asp.net-core blazor blazor-webassembly indexeddb
1个回答
0
投票

您可以在 MainLayout.razor 中实现此功能

@update()

@code{
    public async Task update()
    {
        using var db = await DbFactory.Create<IndexDb>();
        var lastUpdateTime = db.lastUpdateTime.Last();
        if (lastUpdateTime.date < DateTime.Now.date)
        {
            db.allProducts.Clear();
            foreach (var product in products)
            {
                db.allProducts.Add(product);
            }

            db.lastUpdateTime.Add(DateTime.Now);
            await db.SaveChanges();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.