我在Meteor.call函数中设置会话变量时遇到问题。似乎Meteor不会将会话变量设置为我在函数范围之外提出的任何变量。
Meteor.startup(function () {
// code to run on server at startup
// prompt for name
var playerName = prompt("Please enter your name:", "");
Meteor.call('createPlayer', playerName, function(error, result) {
console.log("PLAYER_ID: " + result);
Session.set("myPlayerID", result);
console.log("SESSION_PLAYER_ID: " + Session.get("myPlayerID"));
});
console.log("SESSION_PLAYER_ID2: " + Session.get("myPlayerID"));
Session.set("gameState", SHOW_LOBBY);
});
控制台打印出来:
PLAYER_ID:正确的ID
SESSION_PLAYER_ID:正确的ID
SESSION_PLAYER_ID2:未定义
如您所见,会话变量在函数范围之外不再正确。有什么建议?
答案 0 :(得分:1)
对createPlayer
的调用是异步的,因此执行顺序为:
createPlayer
myPlayerID
会话变量(SESSION_PLAYER_ID2)createPlayer
的调用:在回调中设置myPlayerID
会话变量因为(4)将在(3)之后执行,所以在尝试记录" SESSION_PLAYER_ID2"时将得到undefined
。如果这是唯一发生的事情(即代码中的其他地方没有错误),您应该能够在浏览器控制台中执行以下操作:
console.log(Session.get('myPlayerID'));
并且,希望您能得到正确的结果。所以回答你原来的问题:我在这里看不出任何错误 - 会话变量仍然可以在范围之外使用。这似乎只是对异步函数行为的误解。