在CefSharp中调用JS中的async方法
Invoke async method from JS in CefSharp
如何在CefSharp中调用。net异步方法?我想调用一个等待控制台应用程序调用的方法。
我的想法如下:我调用了一个签名如下的方法:
public async Task<int> Calculate(){
,当它完成时,它的结果将通过JS端的承诺返回。目前,它不起作用。当它完成时,没有回调,然后我就不能再调用它了。
谢谢
我遇到了同样的问题。
一个丑陋的解决方案似乎是将您的方法修改为async void
并接受两个IJavascriptCallback
参数(resolve
和reject
)。
public class MyCalculator
{
public async void CalcAsync(
string name,
IJavascriptCallback resolve,
IJavascriptCallback reject)
{
try
{
if (resolve.IsDisposed)
return;
int i = /* compute i */;
if (!resolve.IsDisposed)
await resolve.ExecuteAsync(i);
}
catch (Exception e)
{
if (!reject.IsDisposed)
await reject.ExecuteAsync(e.ToString());
}
}
}
注册:browser.RegisterAsyncJsObject("myCalculator", new MyCalculator());
然后在JavaScript中:
function doThingAsync(name) {
return new Promise(function (resolve, reject) {
window.myCalculator.calcAsync(name, resolve, reject);
});
}
var result = await doThingAsync("foo")
你可以像这样把模式拉出来:
private static async Task Promisify(IJavascriptCallback resolve, IJavascriptCallback reject, Func<Task> action)
{
try
{
if (!resolve.IsDisposed)
await action();
if (!resolve.IsDisposed)
await resolve.ExecuteAsync();
}
catch (Exception e)
{
if (!reject.IsDisposed)
await reject.ExecuteAsync(e.ToString());
}
}
private static async Task Promisify<T>(IJavascriptCallback resolve, IJavascriptCallback reject, Func<Task<T>> action)
{
try
{
var result = default(T);
if (!resolve.IsDisposed)
result = await action();
if (!resolve.IsDisposed)
await resolve.ExecuteAsync(result);
}
catch (Exception e)
{
if (!reject.IsDisposed)
await reject.ExecuteAsync(e.ToString());
}
}
绑定对象的方法类似于:
public class MyCalculator
{
public async void CalcAsync(
string name,
IJavascriptCallback resolve,
IJavascriptCallback reject)
{
Promisify(resolve, reject, () => /* compute i */);
}
}
我想使用的(假设的)API类似于:
public class MyCalculator
{
public async Task<int> CalcAsync(string name) => /* compute i */;
}
:
var result = await window.myCalculator.calcAsync("foo")
相关文章:
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- node.js应用程序中的async.js问题
- 为什么当async标志设置为false时,xmlhttprequest中的代码可以工作,而当它设置为true时却不能工作
- 使用ajax调用中的数据而不使用async:false
- async.parallel中的回调是如何工作的(它来自哪里?)
- 如何防止bind在使用async.series时更改node.js中的原始对象
- 如何在nodejs中的async.each中进行同步http调用
- express js中的async.waterfall方法
- HTML<脚本>Magento中的async属性
- Nodejs中的async/await替换
- 使用 Async.parallel 我的参数的生命周期不会超过使用 MongoDB 的 NodeJS 中的异步调用
- for 循环中的 Async.瀑布未正确迭代
- 如何在node.js Express中的async.each中使用请求
- 在CefSharp中调用JS中的async方法
- 如何理解javascript中的async以及与EventLoop的通信
- Node.js的一个forEach循环中的Async承诺在另一个then语句中
- 理解ECMAScript中的async/await提议
- 从Javascript中的async函数获取返回值
- 为什么node.js中的async在循环中出错
- 异步 grunt 任务中的 async.series