2014-04-20 2 views
1

누구든지 서버에서 호출 된 함수가 실행될 때까지 클라이언트를 대기시키는 방법을 말해 줄 수 있습니까? 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); 
} 

});

usersExistsWithThisLetterUsers.find()Meteor.call이 완료 될 때까지 대기하지 않기 때문에 항상 1입니다. 데이터베이스를 확인하여이 사실을 확인했으며 letters 배열에 항목이있는 사용자가 없습니다.

도움을 주시면 감사하겠습니다.

답변

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

나는 그것이 도움이되기를 바랍니다!

+1

고마워요! 그게 해결 됐어! – user3475602

관련 문제