目前我正在尝试使用 GraalJS 让 Firestore Web 实现在 Java 中工作。不幸的是,在我的用例中,我无法直接使用 Java 实现。
我已经用 OpenJDK15,16 和 GraalVM21.1 Java 16 试过了
一旦我在 firefox 的 devtools 中运行我的 JavaScript 代码,一切正常,我得到的承诺得到履行,并且数据被设置在 firestore 中:
Promise { <state>: "fulfilled", <value>: undefined }
但是当我用 GraalJS 运行代码时,我只是被 System.out.println(result); 返回 并且数据未在 Firestore 中成功设置
Promise{[[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined}
这是我的 Java 代码:
public static void main(String[] args) throws NoSuchMethodException, ScriptException, IOException, URISyntaxException {
Path jsPath = Paths.get(FireJava.class.getResource("/script.js").toURI());
ScriptEngine graalEngine = new ScriptEngineManager().getEngineByName("graal.js");
try (BufferedReader reader = Files.newBufferedReader(jsPath)) {
graalEngine.eval(reader);
Invocable invocable = (Invocable) graalEngine;
Object result = invocable.invokeFunction("main");
System.out.println(result);
}
}
这是我的 script.js 文件,用 Java 调用:
// copy of https://www.gstatic.com/firebasejs/7.15.5/firebase-app.js
!function(t,e){"object"==typeof exports ...
// copy of https://www.gstatic.com/firebasejs/7.15.5/firebase-firestore.js
!function(t,e){"object"==typeof exports ...
firebase.initializeApp({
apiKey: "...",
authDomain: "...",
...
});
firebase.firestore().settings({ experimentalForceLongPolling: true });
const db = firebase.firestore();
async function main() {
go().then((erg) => {
return erg;
});
};
async function go() {
return new Promise(function (resolve, reject) {
db.collection('firetest1').doc('ABTIG40Gyk5Z49oGg80Z').set({
"data" : "300"
})
.then(() => {
resolve({
'success' : true
});
});
});
}