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

vc9ivgsu  于 11个月前  发布在  IndexedDB
关注(0)|答案(1)|浏览(184)

我有一个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应用程序启动时(这甚至是可能的)?当他们打开包含所有产品的页面时?实际上,我只需要每天更新一次产品数据,当他们当天第一次打开它时。

kuarbcqp

kuarbcqp1#

您可以在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();
        }
    }
}

字符串

相关问题