Meteor.js:Deps.autorun和订阅

时间:2013-11-13 01:44:54

标签: meteor

我最近选择了MeteorJs并且真的很喜欢它。我已经有99%的应用程序可以使用,除了这个唠叨的错误(我已经追了两天了)。

问题是登录或更恰当地登录用户登录后或用户创建帐户时发生的情况。我的代码可以使用,但它似乎是一个时间问题。

如果我取消对Deps.autorun的调用,则登录失败,因为它找不到房间。 但是,如果之后创建帐户失败,因为它没有用户配置文件。请注意,即使失败,我也可以刷新页面,一切正常。我已经完成了一百次代码,这必须是它。

有什么明显的东西吗?

Deps.autorun ->
  if Meteor.user()
    user   = Meteor.user()
    userId = Meteor.userId()
    email  = user.emails[0].address

    Meteor.subscribe "rooms", email

    if user.profile is undefined
      if Rooms.findOne() is undefined
        roomId = Rooms.insert({name: "Watercooler", ownerId: userId, inviteeEmails: [], roster: []})
      else
        roomId = Rooms.findOne()._id

      Meteor.users.update({_id: userId}, {$set:{'profile.lastRoomId': roomId, 'profile.showGravatars': true}})
    else
      roomId = user.profile.lastRoomId

    Meteor.subscribe "connections"
    Meteor.subscribe "messages", roomId
    Meteor.subscribe "last_in_room", roomId
    Meteor.call 'addUserToRoster', roomId

    Meteor.setInterval ->
      Meteor.call 'keepalive', userId
    , 5000

2 个答案:

答案 0 :(得分:0)

您是否尝试在用户注册时创建房间?在创建用户挂钩上查看此位:http://docs.meteor.com/#accounts_oncreateuser

答案 1 :(得分:0)

看起来很乱,为什么不在创建用户时在Meteor.methods中对服务器进行插入和更新。

我不认为你在Deps.autorun中使用1/2代码也可以获得任何收益。取出以下内容:     Meteor订阅“连接”

这不需要在Deps.autorun中。这条线可能找到一个更好的家:     Meteor.call'addUserToRoster',roomId

喜欢:     Accounts.onCreateUser(FUNC) http://docs.meteor.com/#accounts_oncreateuser