javascript - 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 文件。
但是,这阻止了我,因为我想将此对象传递给下一个函数,这不起作用。
如何在继续之前添加一个选项以等待结果存储在数据变量中?
解决方案
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
)作为第二个参数。
推荐阅读
- visual-studio - CSV 上的 SSIS SSMS 逗号问题
- python - Python Pandas 将列表中的多个 SAS 文件读取到单独的数据帧中
- javascript - 显示带有动态数据的高图
- python - 在 django 中从用户输入写入 csv 文件:每个字符出现在新行上
- macos - GCC 未检测到 MacOS Mojave 中的库路径
- ios - Swift:线程 1:EXC_BAD_ACCESS 即使有警卫
- php - PHP 生成的 HTML 的备用背景底纹的
- python - tkinter 中的 bind 和 master.bind 有什么区别?
- javascript - 使用javascript函数重定向到另一个页面
- jsf - 如何正确使用