Meteor方法在客户端执行之前等待

时间:2014-04-20 09:49:02

标签: meteor

任何人都可以告诉我如何让客户端等到服务器上的被叫函数被执行?

我的代码:

Meteor.methods({
markLettersAsRead: function(userId) {
    if(serverVar) {
        Users.update({_id: userId}, {$set: {letters: []}}); // removing all references
    }
}

});

Template.letter.events({
'click a': function() {
    Meteor.call('markLettersAsRead', Meteor.userId(), this._id, function(err) {
        if (err) {
            console.log(err);
        }
    });
    var usersExistsWithThisLetter = Users.find({letters: {_id: this._id}}).count();
    console.log(usersExistsWithThisLetter);
}

});

在我的示例中,usersExistsWithThisLetter始终为1,因为Users.find()不会等到Meteor.call完成。我通过检查数据库验证了这一点,并且没有用户存在letters数组中的条目。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您需要在回调中查询集合,因为这样您就可以确定您的服务器方法已经被执行了。我会做这样的事情(注意self变量声明):

var self = this;
Meteor.call('markLettersAsRead', Meteor.userId(), this._id, function(err) {
   if (!err) {
       var usersExistsWithThisLetter = Users.find({letters: {_id: self._id}}).count();
       console.log(usersExistsWithThisLetter);                
   } else {
       console.log(err);
   }
});

我希望它有所帮助!