0

MongoDB から取得した新しいデータでオブジェクト プロパティを更新しようとしています。次のコードは機能しません。どうしてか分かりません?誰でも私を助けることができますか?

 var UserDB = require('../models/user_model.js').UserModel;    
    function User(uid, username, credit, socket, seat, normal, bank, bankThree) {
            this.uid = uid;
            this.username = username;
            this.credit = credit;
            this.socket = socket;
            this.seat = seat;
            this.normal = normal;
            this.bank = bank;
            this.bankThree = bankThree;
            this.serverPerform = 0;
            this.actionTaken = false;
            this.cards = [];
            this.bet = 0;
            this.catched = false;
            this.action = false;
        }
        User.prototype.update = function(){
            var self = this;
            UserDB.findOne({uid:this.uid},function(err,doc){
                console.log(doc);
                if(!err){
                    self.username = doc.username;
                    self.credit = doc.credit; 
                    console.log(self); // work as expected
                }
            });

            console.log(self); // nothing change
        };
    var user = new User(1);
    user.update(); //nothing change
4

1 に答える 1

0

あなたのmongo update関数はASYNCHRONOUSであるように見えるので、もちろんコールバック内のログは機能しますが、外部のログは機能しません。

User.prototype.update = function(callback){ //Now we've got a callback being passed!
    var self = this;
    UserDB.findOne({uid:this.uid},function(err,doc){
        console.log(doc);
        if(!err){
            self.username = doc.username;
            self.credit = doc.credit; 
            console.log(self); // work as expected
            callback(); //pass data in if you need
        }
    });
};

a を渡したcallbackので、次のように使用できます。

var user = new User(1);
user.update(function() {
    //do stuff with an anonymous func
});

または、コールバックを定義して渡します

function callback() {
    //do stuff
}

var user = new User(1);
user.update(callback);
于 2013-09-30T20:51:07.833 に答える