【发布时间】:2021-01-16 09:27:00
【问题描述】:
假设我们有以下 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 返回的 promise?
【问题讨论】:
标签: javascript java promise graalvm polyglot