0

目前我正在尝试使用 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
            });
        });
    });
}

4

0 回答 0