InvokeAsync通过回调函数

时间:2019-11-12 19:16:28

标签: c# asp.net-core blazor blazor-server-side

我正在尝试编写一个通过JSInterop使用Google地图的Blazor组件。我正在尝试调用“ DirectionsService”类和“ route”方法。DirectionsService Route Method

这是我的本地方法:

    public async Task<DirectionResponse> Route(DirectionsRequest request)
    {
        var json = await _jsObjectRef.InvokeAsync<string>(
                "google.maps.DirectionsService.route",
                request);

        var directionResponse = JsonConvert.DeserializeObject<DirectionResponse>(json);

        return directionResponse;
    }

此方法有两个参数。一个是请求对象。第二个是回调函数。 Method Definition

如何使用“ InvokeAsync”方法完成此操作?

如何包含回调函数以便正确接收响应?

2 个答案:

答案 0 :(得分:1)

您不能包含直接调用.NET代码的回调。

但是,您可以将回调传递给另一个javascript函数。

然后,javascript函数可以使用标准语法回调到.NET:

    return all((case1 == (17, 1), case2 == (17, 1), case3 == (2, 1),
        case4 == (1, 1), case5 == (0, -4)))

答案 1 :(得分:0)

所以...这基本上是我得出的结论。该代码不是最终的代码,特别是拒绝部分,但实际上是使用async / await使对DirectionsService的调用同步。

代码如下:

        let promise = new Promise((resolve, reject) => {
            directionsService.route(dirRequest, (result, status) => {
               if (status == 'OK') {
                   resolve(result);
               }
               else
               {
                   reject(status);
               }
            });
        });

        //Wait for promise
        let result = await promise;
        return result;

从本质上讲,这使我能够响应调用此javascript函数的C#函数。现在剩下的唯一事情就是我将需要的位序列化为C#函数。

感谢Postlagerkarte帮助我。