从同步函数中调用异步函数

诺姆

我正在构建Blazor客户端应用程序。我正在使用MatBlazor组件。

我在页面上有两个MatSelectString控件。第一个用于选择类别,第二个用于从类别中选择产品。因此,我将其设置为:

<MatSelect Outlined="true" Label="Category" @bind-Value="@Category">
    <MatOptionString></MatOptionString>
    @foreach (var cat in GetCategories())
    {
        <MatOptionString Value="@cat">@cat</MatOptionString>
    }
</MatSelect>
<MatSelect Outlined="true" Disabled="@(!string.IsNullOrWhiteSpace(Category))" Label="Product" @bind-Value="@Product" >
    <MatOptionString></MatOptionString>
    @foreach (var prod in GetProducts(Category))
    {
        <MatOptionString Value="@prod">@prod</MatOptionString>
    }
</MatSelect>

GetProducts(Category)代码中,我想调用后端。问题是只有一个HttpClient.GetJsonAsync<>()方法,不能从非异步方法中调用。但是不能使GetProduct()异步。

我尝试过的事情:

  • 将对函数的调用放在异步lambda中(在foreach或其他代码块中不允许)
  • 使用Task.Result(挂起)
  • 将后端调用置于其他组件级异步事件中(多次调用)

有任何想法吗?

丹妮·埃雷拉(Dani Herrera)

您可以使用ValueChangedEventCallback:

<MatSelect 
    Outlined="true" 
    Label="Category" 
    ValueChanged="(string i)=>OnChangeCategory(i)"> @* <-- here *@
    <MatOptionString></MatOptionString>
    @foreach (var cat in GetCategories())
    {
        <MatOptionString Value="@cat">@cat</MatOptionString>
    }
</MatSelect>

@code
{
   protected async Task OnChangeCategory(string newValue)
   {
      this.Category = newValue;
      // call backend async tasks
      // ...
   }

blazorfiddle.com上查看

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章