0

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

この関数を 2 回呼び出すと、内部コールバック関数の _user 変数が新しい値を取得します。新しい値を割り当てる代わりに、関数 var をオーバーライドしているようです。

この関数を呼び出して新しい変数を割り当てる必要があるため、_user 変数を変更せずに保存関数とインデックス関数が完了するのを待ちます。

4

1 に答える 1

0

JavaScript変数は確かに関数スコープであるためvar _user、後続の実行で新しい変数を定義しないことについての説明はありません。

コードを見ると、Userコンストラクターで何が起こっているのか、もっと疑わしいと思います。おそらく、スコープやその他の論理的な問題が含まれているため、後続の呼び出しで同じユーザーが作成されます。同様の「容疑者」は、data渡されるパラメータとdb.createNode()。です。JavaScriptがルールに従わないのではなく、プログラム上の問題が発生している可能性が高いため、これらの領域のみを提案します:)

また、あなたのUser.create関数がと呼ばれるパラメータを受け入れることに気づき_callbackましたが、後でを呼び出していcallbackます。それがあなたの例のタイプミスなのか、それとも例に示されていないより高いスコープから誤ってコールバックを呼び出したのかはわかりませんが、それは奇妙な動作を引き起こす可能性があります。

于 2012-05-09T13:11:44.120 に答える