我有一种方法,用户可以加入现有游戏或创建新游戏。此外,相应id的id存储在一个对象中,并按以下方式返回:
Meteor.methods({
newGame: function(gameQuestions) {
var user = Meteor.user();
var gameWaiting = GameCollection.findOne({players: {$size: 1}, active: false, current: true});
var result = {};
if (!gameWaiting) {
var gameId = GameCollection.insert
//.....
result.id = gameId;
} else {
if (_.contains(gameWaiting.players, user._id))
//.....
result.id = gameWaiting._id;
} else {
//......
result.id = gameWaiting._id;
}
}
return result
},
在客户端,我有一个按钮,用户在其中点击新游戏并输入方法返回的ID并将其放入会话变量中。从那里路由器转到提供的ID:
Template.loggedIn.events({
"click #newGame": function() {
var gameQuestions = Questions.find().fetch();
Meteor.call('newGame', gameQuestions, function(err, data) {
if (err)
console.log(err);
Session.set('uniqueId', data);
console.log(data)
});
var gameId = Session.get('uniqueId').id;
console.log(gameId);
Router.go('gamePage', {_id: gameId});
}
});
但是,会话变量保存为OLD会话变量,然后路由器转到错误的地址。以下是上面的控制台:
creating a new game, none available
yKrSeeAfMh4ppXWJP
Object {id: "AKXYbWcdJWfaXfo8C"}
这是地址和实际游戏ID
http://localhost:3000/games/yKrSeeAfMh4ppXWJP
Current Game ID: AKXYbWcdJWfaXfo8C
如何确保使用流星法返回的新ID更新var gameId,然后再继续路线?
答案 0 :(得分:1)
您尝试在点击后立即重定向用户,而无需等待来自服务器的数据。 在收到来自服务器的信息后重定向用户 - >内部回调。
Template.loggedIn.events({
"click #newGame": function() {
var gameQuestions = Questions.find().fetch();
Meteor.call('newGame', gameQuestions, function(err, data) {
if (err)
console.log(err);
Session.set('uniqueId', data);
console.log(data)
var gameId = Session.get('uniqueId').id;
Router.go('gamePage', {_id: gameId});
});
}
});