从Javascript中的回调函数获取结果

时间:2015-10-17 23:52:06

标签: javascript c# asynchronous

我正在编写一个将由C#应用程序调用的Javascript函数。我可以从C#调用该函数,但是无法检索函数的结果。

所以我有以下结构:

var B = function() {
    var A = function() {
        var dfd = new $.Deferred();
            // do something and then return the value I need
            return dfd.resolve(x);
        ......
        return dfd.promise();
    }
    $.when(A()).
        then(function(x) {
            // I can get the x I want here.
            alert(x);
            // What to do at this point?
        });
}

由于A()使用了异步方法,因此我选择使用jQuery.promise()方法来确保获得A()的最终结果。现在我希望B()将值x返回给C#应用程序。对此有什么好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我假设您通过调用WebView方法 InvokeScriptAsync 并使用Js函数名作为参数来调用您的Javascript函数。

这里的问题是你的JavaScript函数是异步的,因为它使用了promise - 所以你不能简单地在C#上获得它的返回值。 IAsyncOperation在返回promise对象时结束,而不是已经解析。

如果你的javascript函数是同步的:

InvokeScriptAsync 函数的返回值是脚本调用的字符串结果 - 因此,如果您等待它,您将获得结果。

MSDN文档:https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.webview.invokescriptasync.aspx?f=255&MSPPError=-2147217396

但是,您始终可以通过使用JavaScript中的字符串参数调用 windows.external.invoke 来调用webView事件,并通过订阅webView ScriptNotify 事件来获取C#。 / p>