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 更新函数是异步的,所以你的回调内部的日志当然可以工作,而外部的日志不能。

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

现在你已经传入了一个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 回答