Blazor await LocalStorage.GetAsync 不要等待

Blazor await LocalStorage.GetAsync dont wait

我想从 .razor 文件中的 LocalStorage 中读取信息,然后在此基础上执行进一步的源代码。问题是他从 LocalStorage 读取时没有等待。

@{
    var loggedIn = IsLoggedIn();

    if (loggedIn.Result)
    {
       // do something
    }
}
private async Task<bool> IsLoggedIn()
{
    var result = await LocalStorage.GetAsync<Account>("AccountInfo");
    _account = result.Value;

    return string.IsNullOrEmpty(_account?.Name);
}

一旦它到达“await LocalStorage.GetAsync”并且我继续使用调试器,就会调用“if (loggedIn.Result)”而不等待 await 的结果。

可能是什么原因?

致以最诚挚的问候,感谢您的想法。

您没有 await 调用 IsLoggedIn,因此只要代码到达 await LocalStorage.GetAsync 调用,就会在主线程上继续执行。

你不能在 razor markup/inline 代码中使用 await,所以你需要做不同的事情。

尝试这样的事情:

@if (loggedIn)
{
 // do something
}

@code 
{
  bool loggedIn = false;

  protected override async Task OnInitializedAsync()
  {
    loggedIn = await IsLoggedIn();
    StateHasChanged();
  }

  private async Task<bool> IsLoggedIn()
  {
    var result = await LocalStorage.GetAsync<Account>("AccountInfo");
    _account = result.Value;

    return string.IsNullOrEmpty(_account?.Name);
  }
}