首页 > 解决方案 > Neo4J Javascript 驱动程序无法将读取的数据传递给对象

问题描述

我不得不承认我有点失落,因为我不是专业的 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);
    })

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

控制台.log(数据);

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

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

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

标签: javascriptneo4j

解决方案


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

(异步)将results(或错误)传递给您的next()函数(您必须编写)的最简单方法可能是:results从现有的返回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)作为第二个参数。


推荐阅读