我尝试了这里发布的所有解决方案,但没有任何效果,因为我的问题有点不同。
我有以下代码(调用外部neo4j模块的代码将节点插入Neo4J数据库,然后获取该节点的Neo4J Id):
dbneo.insertNode({
auth_id: user.id,
username: user.name,
name: user.name
},function (err, node){
if(err) throw err;
// Output node properties.
console.log(node.data);
// Output node id.
console.log(node.id);
});
一切正常,但如何在函数范围(错误,节点)之外传递 node.id ,然后将此值添加到另一个对象?
当我尝试做类似
的事情user.neo_id = node.id;
在上面的代码块之后,它是未定义的(当然)。
尝试在命名函数中运行dbneo.insertNode,但如果我将返回值放入函数(错误,节点),那么它仍然是未定义的。
很抱歉,如果问题有点简单/愚蠢,但我刚开始使用JavaScript。谢谢!
答案 0 :(得分:0)
好的,所以在你的建议之后,我有这个临时代码。可能不是最好的(可能会堵塞),但它解决了问题。
只有在我确定从Neo4J数据库收到变量(node.id)之后才会调用下一个函数。如果有人知道更优雅的解决方案,请告诉我(特别是使用异步库)。
dbneo.insertNode({
auth_id: user.id,
username: user.name,
name: user.name
},function (err, node){
if(err) throw err;
// Output node properties.
console.log(node.data);
// Output node id.
console.log(node.id);
// RECEIVED node.id ? ONLY THEN SEND IT TO THE FUNCTION THAT NEEDS IT
send_neo_id(node.id);
});
// THIS IS THE FUNCTION THAT WAS NOT RECEIVING NODE.ID BEFORE:
function send_neo_id(neo_id) {
user.neo_id = neo_id;
db.set('user:id:' + user.name, id, function(err) {
if (err) return fn(err);
db.hmset('user:' + id, user, function(err) {
fn(err);
});
});
};