任何人都可以告诉我如何让客户端等到服务器上的被叫函数被执行?
我的代码:
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
数组中的条目。
非常感谢任何帮助。
答案 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);
}
});
我希望它有所帮助!