异步JavaScript静态函数变量

时间:2012-05-09 12:08:06

标签: javascript node.js asynchronous

我在javascrip(nodejs服务器)中遇到“静态”功能问题。

User.create = function(data, _callback){        
    var node = db.createNode(data);
    var _user = new User(node);
    _user.save(function(err){
        if(err) return callback(err, null);
        _user.index(function(err){
            if(err) return callback(err, null);
            callback(null, _user);  
        })
    })
};

如果我两次调用此函数,内部回调函数中的_user变量将获取新值,它似乎会覆盖函数var而不是分配新函数。

我需要调用这个函数来分配一个新变量,所以它等待save和index函数完成而不改变_user变量。

1 个答案:

答案 0 :(得分:0)

JavaScript变量确实是函数范围的,所以var _user没有任何解释在后续运行中没有定义新变量。

查看代码,我会更加怀疑用户构造函数中发生的事情 - 可能它包含一些范围或其他逻辑问题,导致在后续调用中创建相同的用户。类似的“嫌疑人”将被传入data参数,以及db.createNode()。只是建议这些方面,因为它更有可能发生程序性问题,而不是JavaScript不遵守规则:)

此外,我注意到您的User.create函数接受名为_callback的参数,但稍后会调用callback。我不知道你的例子中是否存在拼写错误,或者你是否意外地从示例中未显示的较高范围调用回调,但这可能会产生奇怪的行为。