在Javascript中返回函数范围之外的变量

时间:2014-02-05 15:23:16

标签: javascript node.js neo4j

我尝试了这里发布的所有解决方案,但没有任何效果,因为我的问题有点不同。

我有以下代码(调用外部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。谢谢!

1 个答案:

答案 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);
        });
    });
};