blazor客户端等待的方法在第一次等待之后没有执行



OnAfterRenderAsync在所有代码执行之前退出。只有我等待的第一行被执行了。如果我添加await Task.Delay(1000);作为代码的第一行,那么代码就可以正常工作。如果我将其添加为最后一行代码,那么它就没有影响,并且代码只返回到第一行等待执行。

protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JsRuntime.Create(Map, linkWithToken);
foreach (var marker in Map.Markers)
{
await JsRuntime.AddMarker(Map, marker, new MouseEvent { LatLng = marker.Position });
}
}
}

我使用的是.net 5 rc2和VS Preview 4。

我假设您正试图通过在Blazor组件中的元素中渲染来创建映射。当尝试运行绑定到元素的javascript时,您需要在执行互操作调用之前确保DOM中的元素存在,否则您的javascript将失败,因为DOM元素不存在。调用await Task.Yield();可以让Blazor在尝试与DOM元素交互之前完成DOM元素的呈现,以确保它们存在。

protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await Task.Yield(); //wait a tick for Blazor to generate the DOM elements
await JsRuntime.Create(Map, linkWithToken);
foreach (var marker in Map.Markers)
{
await JsRuntime.AddMarker(Map, marker, new MouseEvent { LatLng = marker.Position });
}
}
}

最新更新