请参见以下代码:
peopleObj.forEach( item=>{
let user = item.user;
let event = item.event;
var userNode = g.addV('user');
Object.keys(user).forEach(att=>{
console.log('att: ' + att+", val: "+ user[att]);
userNode.property(att, user[att]);
});
userNode.next();
console.log('created userNode');
eventNode = g.addV('event');
Object.keys(event).forEach(att=>{
console.log('att: ' + att+", val: "+ event[att]);
eventNode.property(att, event[att]);
});
eventNode.next();
console.log('created eventNode');
// const names = await g.V().hasLabel('event').values('name').toList();
// console.log(names);
var u_p = g.V().hasLabel('user').has('name',user.name).next();
var e_p = g.V().hasLabel('event').has('name',event.name).next();
var r1 = g.V(u_p).addE('triggers').to(e_p);
r1.next();
}
在控制台中运行它时,我看到以下错误:
(node:30272) UnhandledPromiseRejectionWarning: Error: Server error: Could not locate method: DefaultGraphTraversal.to([{}]) (599)
at DriverRemoteConnection._handleMessage (/Users/frankhe/projects/aws/sam-app/hello-world/node_modules/gremlin/lib/driver/driver-remote-connection.js:180:9)
我遵循了Gremlin V3文档,为什么可以添加节点,但是不能在此处添加边?
Gremlin中还有另一个问题,在创建之前检查存在性的最佳方法是什么?如果您看代码,我只是直接创建事件,但是我需要避免重复的事件,我尝试按照文档中的说明使用await,但是nodeJS中根本没有await。谁能告诉我Gremlin提供的最佳方法?
谢谢。
答案: 我的gremlin nodejs是:
“ gremlin”:“ ^ 3.3.4”
我的gremlin服务器是 apache-tinkerpop-gremlin-server-3.3.4
最重要的问题是无论我怎么做,我总是遇到这个错误:
Server error: Could not locate method: DefaultGraphTraversal.to([{}])
我已经更改为异步方式,但是没有用。谁能给我展示一个在Gremlin上使用nodeJS的工作示例?
谢谢
简化版在这里:
var g1 = graph.traversal().withRemote(new DriverRemoteConnection('ws://localhost:8182/gremlin'));
var v1 = g1.addV('user').property('name','Frank').next(()=>{
console.log('created1')
var v2 = g1.addV('event').property('name','Event1').next(()=>{
console.log('created2')
g1.V(v1).addE('trigger').to(v2).property('weight',0.75).iterate();
});
});
但是在控制台中。我从未见过他记录过created1的信息。
您能在nodeJS中给我一个工作示例吗?
答案 0 :(得分:1)
您正在将同步执行和异步执行混合在同一代码中。
考虑使用时:
userNode.next();
console.log('created userNode');
该消息不正确。 next()
返回一个Promise
,该异步解析(请参阅:RemoteConnection Submission)。
正确的用法是:
userNode.next().then(() => console.log('created userNode'));
或者,如果您使用的是async functions:
await userNode.next();
console.log('created userNode');
答案 1 :(得分:0)
只需删除.next()
和g.V(v1)
调用,现在示例运行良好:
const v1 = await g.addV('person').property('name','marko');
const v2 = await g.addV('person').property('name','stephen');
await v1.addE('knows').to(v2).property('weight',0.75).iterate();
我正在使用:gremlin@3.4.1