使用纯javascript将Neo4j密码查询结果作为全局范围内的变量返回

dbf7pr2w  于 2022-11-05  发布在  Java
关注(0)|答案(1)|浏览(139)

我有一个neo4j服务器在docker上运行,我正在尝试使用普通的javascript对这个服务器执行一些查询,运行在一个html文件中,我想得到的是在一个全局变量中使用查询结果。
使用此变量,我想更新一些
<select>选项。
返回的查询值如下所示:

{
    "type_A" : {
        "Sub Assembly" : [
            [ "B.1", "descrizione per B.1", 0 ],
            [ "B.2", "descrizione per B.2", 1 ],
            [ "B.3", "descrizione per B.3", 2 ]
        ],
        "Component" : [
            [ "B.1.1", "descrizione per B.1.1", 3 ],
            [ "B.2.1.1", "descrizione per B.2.1.1", 6 ]
        ],
        "Assembly" : [
            [ "A", "descrizione per A", 12 ],
            [ "B", "descrizione per B", 26 ]
        ]
    },
    "type_B" : {
        "Sub Assembly" : [
            [ "C.1", "descrizione per C.1", 8 ],
            [ "C.2", "descrizione per C.2", 9 ],
            [ "C.3", "descrizione per C.3", 10 ]
        ],
        "Assembly" : [
            [ "C", "descrizione per C", 7 ]
        ]
    }
}

第一个<select>将有type_A和type_B作为选项,第二个将有例如Sub Assembly、Assembly、Component(如果我在第一个选择中选择type_A)。根据所做的选择,我将用相应的数组内容填充列表。
我能够执行查询,但现在我在如何使用查询响应方面遇到了麻烦。
我所尝试的是(查询是一个示例,而不是我使用的)

<script type="text/javascript">
        // define our fetch functions, and handle our async promises
        const driver = neo4j.driver('locahost', neo4j.auth.basic('user', 'password'))
        const session = driver.session()

        async function getNodes() {
            session
                .run('MATCH (n) RETURN n.code AS code')
                .then(results => {
                    const output = []
                    results.records.forEach(res => {
                        output.push(res.get('code'))
                    })
                    console.log(output)
                    return output
                })
                .catch(error => {
                    throw error;
                })
                .finally(() => {
                    session.close();
                });
        }

        var out = getNodes().then(res => {
            return res
        })
        console.log(out)

    </script>

作为console.log,我得到

Promise {<pending>}
[[Prototype]]:Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: undefined

我想使用一个全局变量,这样我只需要向服务器发出一个请求,就可以获得“准备”DOM所需的所有初步信息,并管理两个<select> change事件。
这是管理“问题”的正确方法吗?
任何帮助都将不胜感激!

noj0wjuj

noj0wjuj1#

在这段代码中:

async function getNodes() {
            session
                .run('MATCH (n) RETURN n.code AS code')
                .then(results => {
                    const output = []
                    results.records.forEach(res => {
                        output.push(res.get('code'))
                    })
                    console.log(output)
                    return output
                })
                .catch(error => {
                    throw error;
                })
                .finally(() => {
                    session.close();
                });
        }

您的函数getNodes()返回 nothing。在嵌套的promise中有返回值,但实际的函数不返回任何值。您可能需要在“session”之前放置“return”。

相关问题