【问题标题】:Neo4J Javascript drivers can't pass the read data to objectNeo4J Javascript 驱动程序无法将读取的数据传递给对象
【发布时间】:2020-02-24 08:52:04
【问题描述】:

我不得不承认我有点失落,因为我不是专业的 javascript 程序员。

我想查询我的 neo4j 数据库,以便在一个变量中存储我的数据的类似 json 的结构,这些数据来自一个简单的查询,如

MATCH (a:VarA)-->(b:VarB) RETURN a.var1 as one, a.var2 as two, b.var3 as three, b.var4 as four; 

所以我写了一些简单的代码:

var driver = neo4j.driver(
        'BOLT PATH',
        neo4j.auth.basic('MYUSER', 'MYPASS'),
        { disableLosslessIntegers: true }
    );
var session = driver.session({ defaultAccessMode: neo4j.session.WRITE });

session
    .run("MYCYPHERQUERY")
    .then(r => {
        results = r.records.map(d => d.toObject());
        data = JSON.stringify(results);
        session.close();
        console.log(data);
    })
    .catch(error => {
        results = [];
        console.log(error);
    })

但是,我想我卡在这个异步函数中,好像我添加了

console.log(数据);

在代码之后,它返回一个空数组,而 .then 块中的那个在之后被触发并返回正确的 json 文件。

但是这阻止了我,因为我想将此对象传递给下一个函数,这不起作用。

如何添加一个选项以等待结果存储在数据变量中,然后再继续?

【问题讨论】:

    标签: javascript neo4j


    【解决方案1】:

    Result.then 方法返回一个 Javascript Promise,您应该了解它。

    可能(异步)将results(或错误)传递给您的next() 函数(您必须编写)的最简单方法是:从现有的then 返回results,然后链接另一个then 在现有的之后调用:

    session
      .run("MYCYPHERQUERY")
      .then(r => {
        const results = r.records.map(d => d.toObject()); // results can be local
        data = JSON.stringify(results);
        session.close();
        console.log(data);
        return results;
      })
      .then(r => {
        next(null, r);
      })
      .catch(error => {
        console.log(error);
        next(error);
      })
    

    在上面的例子中,next() 将错误(或null)作为第一个参数,将结果(或undefined)作为第二个参数。

    【讨论】:

    • 感谢您的回答,这对我很有帮助,我正在阅读您发布的有关承诺的文档。下一个功能是由我定义还是部分驱动?问,因为我收到一个错误“下一个未定义”
    • next 是您必须编写的函数。我修改了我的答案以使其更清楚。我巧妙地将函数称为“下一个”,因为您的问题是“我想将此对象传递给下一个函数”。 :-)
    • 实际上,在第一个then方法的底部调用next(null, results)会更简单(而不是返回result),在这种情况下你甚至不需要第二个then 调用。但是你没有什么理由去研究promise机制,如果你想精通javascript,你应该真正了解它......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多