首页 新闻 会员 周边 捐助

.net 执行js引擎库jint 执行js中的异步方法该如何获取返回值

0
悬赏园豆:5 [待解决问题]

有用过.net的js引擎jint的吗,
用jint执行js文件中的async方法,获取不到返回值,有知道怎么解决的吗?
var engine = new Engine();
engine.Execute(“js文件”);
var x= engine.Invoke("getXXAsync", "参数");
x= x.UnwrapIfPromise();

这样执行报错,拿不到返回值,:“'UnwrapIfPromise' called before Promise was settled”
有知道怎么解决的吗,求指点

雪山浪子的主页 雪山浪子 | 初学一级 | 园豆:37
提问于:2023-09-20 15:15
< >
分享
所有回答(1)
0

您遇到的问题是因为您在调用UnwrapIfPromise之前,Promise尚未解决(即异步方法尚未完成)。为了正确获取异步方法的返回值,您需要等待Promise解决后再调用UnwrapIfPromise

以下是一种可能的解决方案:

var engine = new Engine();
engine.Execute("js文件");
var task = engine.InvokeAsync("getXXAsync", "参数");
task.Wait(); // 等待异步方法完成

var x = task.Result;
x = x.UnwrapIfPromise();

在上面的代码中,我们使用InvokeAsync方法调用异步方法,并使用Wait方法等待异步方法完成。然后,我们可以通过Result属性获取异步方法的返回值,并使用UnwrapIfPromise方法进行解包。

请注意,使用Wait方法会阻塞当前线程,直到异步方法完成。如果您在UI线程或主线程中使用这段代码,可能会导致界面冻结或阻塞应用程序的其他操作。如果您的应用程序是基于异步编程模型(如异步/等待或任务并行库),建议使用异步方法和异步等待来执行JavaScript异步方法。

lanedm | 园豆:2396 (老鸟四级) | 2023-09-20 23:11

chagpt 的回答我已经试过了,jint里面有InvokeAsync,自己试试在回答

支持(0) 反对(0) 雪山浪子 | 园豆:37 (初学一级) | 2023-09-21 13:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册