Reactjs 多个用户没有收到Meteor方法调用的结果-工作一次,然后返回未定义?

Reactjs 多个用户没有收到Meteor方法调用的结果-工作一次,然后返回未定义?,reactjs,meteor,meteor-methods,Reactjs,Meteor,Meteor Methods,好的,这是一个有趣的例子。我正在对Meteor中的用户列表进行排序,并试图将用户的索引号返回给客户端。i、 e.我希望创建的第一个用户是位置1,创建的第二个用户是位置2,第三个用户是位置3,等等 我正在服务器上使用Meteor方法: Meteor.methods({ setPosition: function(userId) { let usersArray = Meteor.users.find({}, {sort: {createdAt: 1}}).fetch(); if

好的,这是一个有趣的例子。我正在对Meteor中的用户列表进行排序,并试图将用户的索引号返回给客户端。i、 e.我希望创建的第一个用户是位置1,创建的第二个用户是位置2,第三个用户是位置3,等等

我正在服务器上使用Meteor方法:

Meteor.methods({
  setPosition: function(userId) {
    let usersArray = Meteor.users.find({}, {sort: {createdAt: 1}}).fetch();
    if (!this.userId) {
      throw new Meteor.Error('not-authorized');
    }
    let pos = [];
    for (i = 0; i < usersArray.length; i ++) {
      if (usersArray[i]._id === this.userId) {
         pos = i + 1;
       }
         console.log('this is the position', pos);
         return pos;
     };
    }
  }); //Meteor methods
}//end of meteor isServer

另外,我是一个新手,所以我为任何明显的格式错误道歉,如果你觉得有必要,请指出。谢谢大家!

我们只能说,这种方法不太可能很好地扩展,因为用户越多,在用户列表中找到用户的位置所需的时间就越长


假设用户的位置从未改变(即,您不关心删除-即使删除了#3,第四个用户也始终是第四个),您最好在用户创建时向用户对象添加一个
序列
键。您可以查看最近创建的用户的序列号,并将其递增一,以将其提供给下一个用户。当然,您会希望对该键进行索引。然后每个用户只需使用Meteor.user()就可以知道他们的序列号。序列号

谢谢,我没有看到序列键!但我确实希望代码能够监视删除,这样,如果原始的第三个用户被删除,第四个用户将成为第三个。你有办法做到这一点吗?我想可伸缩性还不是我优先考虑的问题,但它在我的雷达上。如果你想避免漏洞,你必须在删除后对整个集合重新排序。甚至不需要重新排序,只需在删除后减少所有用户的
顺序
Tracker.autorun(() => {
  Meteor.subscribe('position');
    Meteor.call('setPosition', Meteor.userId(), (err, res) => {
      if (err) {
        throw new Meteor.Error(err.message);
        console.log(err);
      } else {
        console.log(res);
        console.log(Meteor.userId());
        Session.set('position', res);
      }
    });
});