Function Meteor-在异步调用中设置会话变量

Function Meteor-在异步调用中设置会话变量,function,session,asynchronous,callback,meteor,Function,Session,Asynchronous,Callback,Meteor,我在Meteor.call函数中设置会话变量时遇到问题。Meteor似乎不会将会话变量设置为我在函数范围之外要求的任何值 流星启动(函数(){ //启动时在服务器上运行的代码 //提示输入姓名 var playerName=prompt(“请输入您的姓名:”,“”); Meteor.call('createPlayer',playerName,函数(错误,结果){ 控制台日志(“玩家ID:+结果”); Session.set(“myPlayerID”,结果); log(“SESSION\u PL

我在Meteor.call函数中设置会话变量时遇到问题。Meteor似乎不会将会话变量设置为我在函数范围之外要求的任何值

流星启动(函数(){ //启动时在服务器上运行的代码 //提示输入姓名 var playerName=prompt(“请输入您的姓名:”,“”); Meteor.call('createPlayer',playerName,函数(错误,结果){ 控制台日志(“玩家ID:+结果”); Session.set(“myPlayerID”,结果); log(“SESSION\u PLAYER\u ID:+SESSION.get(“myPlayerID”)); }); log(“SESSION\u PLAYER\u ID2:+SESSION.get(“myPlayerID”)); Session.set(“游戏状态”,SHOW_大厅); }); 控制台打印出:

玩家ID:正确的ID

会话\u玩家\u ID:正确的ID

会话\u播放器\u ID2:未定义


如您所见,会话变量在函数范围之外不再正确。有什么建议吗

createPlayer
的调用是异步的,因此执行顺序为:

  • 提示用户
  • start调用
    createPlayer
  • log
    myPlayerID
    session变量(session\u PLAYER\u ID2)
  • finsh调用
    createPlayer
    :在回调中设置
    myPlayerID
    会话变量
  • 因为(4)将在(3)之后执行,所以在尝试记录“会话\玩家\ ID2”时,您将得到
    未定义的
    。如果这是唯一发生的事情(即代码中的其他地方没有bug),您应该能够在浏览器控制台中执行以下操作:

    console.log(Session.get('myPlayerID'));
    
    希望你能得到正确的结果。因此,为了回答您最初的问题:我没有发现任何错误-会话变量在范围之外仍然可用。这似乎只是对异步函数行为的误解