javascript - Neo4J Javascript 驱动程序无法将读取的数据传递给对象

标签 javascript neo4j

我不得不承认我感到有点失落,因为我不是一个专业的 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 block 中的数组在之后触发并返回正确的 json 文件。

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

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

最佳答案

Result.then方法返回 Javascript Promise ,你应该了解一下。

(异步)将结果(或错误)传递给您的next()函数(您必须编写)的最简单方法可能是:来自现有 then结果,并在现有调用之后链接另一个 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)作为第二个参数。

关于javascript - Neo4J Javascript 驱动程序无法将读取的数据传递给对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60372310/

相关文章:

javascript - 如何在 Recompose 中使用 withHandlers 向功能组件添加引用并在 ScrollView 上调用 ScrollTo?

file-upload - 使用 LOAD CSV 功能在 neo4j 中上传的最大文件大小是多少

neo4j - 使用 apoc.convert.toTree 时按属性对分层数据进行排序

javascript - "Can' t 查找变量 : window"in suds. js

javascript - 在格式化数字输入时验证数字输入

javascript - AJAX回调函数间歇性添加GET参数失败

javascript - 为什么这个调用在继续之前不等待响应?

python - 如何使用 py2neo 声明唯一约束

python - 属性错误: 'module' object has no attribute 'GraphDatabaseService'

Neo4j Cypher - 将日期时间更改为纪元时间戳