[英]GraalVM JavaScript in Java - How to identify an async method
考虑我们有以下 JS 代码:
async function helloAsync(){
return "Hello";
}
function hello(){
return "Hello";
}
在 Java 中,您可以使用以下方法将此代码加载到 GraalVM 上下文对象中:
context.eval("js", mappingTemplate);
给我们两个成员,我们可以使用以下方法进行评估:
Value bindings = context.getBindings("js");
final Value executionResult1 = bindings.getMember("hello")
.execute();
final Value executionResult2 = bindings.getMember("helloAsync")
.execute();
因此, executionResult2
将是一个可以在 Java 中完成的承诺。 我的问题是如何可靠地判断executionResult2
实际上是一个承诺,而不仅仅是像executionResult1
这样的字符串。 目前,一种幼稚且不可靠的方法可能是:
if (executionResult.toString().startsWith("Promise") &&
executionResult.hasMember("then") && executionResult.hasMember("catch"))
有哪些更可靠/优雅的方式来识别从 JS 返回的承诺?
您可以尝试通过此value.getMetaObject()
检查内容value.getMetaObject()
?
医生说:
返回与此值关联的元对象,如果没有可用的元对象,则返回 null。 元对象表示对象的描述,揭示它的种类和特征。 元对象可能定义的一些信息包括基对象的类型、接口、类、方法、属性等。
可能对您的情况有用。
是的, value.getMetaObject()
是要走的路:它返回与value
实例关联的 JS 构造函数,在您的情况下应该是Promise
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.