通过Meteor在服务器和客户端之间发送阵列。使用angular Meteor的方法

通过Meteor在服务器和客户端之间发送阵列。使用angular Meteor的方法,meteor,angular-meteor,Meteor,Angular Meteor,我正试图获得一个由我的服务器管理并共享给我的客户机的阵列。我认为Meteor.methods()是通过创建getter方法来实现这一点的方法。 虽然出于某种原因,它由服务器正确地打印到控制台,但在我执行Meteor.call()时,它会将未定义的返回到客户端 我得到未定义的返回,不管if是真是假,它总是未定义的 ///server Meteor.methods({ createNewUser: this.createNewUser, getRoles: this.getRoles });

我正试图获得一个由我的服务器管理并共享给我的客户机的阵列。我认为Meteor.methods()是通过创建getter方法来实现这一点的方法。 虽然出于某种原因,它由服务器正确地打印到控制台,但在我执行Meteor.call()时,它会将未定义的返回到客户端 我得到未定义的返回,不管if是真是假,它总是未定义的

///server
Meteor.methods({
  createNewUser: this.createNewUser,
  getRoles: this.getRoles
});
...
getRoles(id) { 
  console.log(roles);
  if (Roles.userIsInRole(id, "admin")) {
    return roles;
  } else {
    return 'blah';
  }
}

///client
ngOnInit() {
 MeteorObservable.autorun().subscribe(() => {
 ...

    Meteor.call("getRoles", Meteor.userId(), (data) => {
      console.log("data", data);
      this.roles = data;
      console.log("roles", this.roles);
    });

    console.log("user list", this.userList);
    console.log("roles", this.roles);
....
});
Meteor.methods()中的另一个方法工作得很好,我似乎不明白为什么这个方法看不见,因为它做得太少了

///output
demo.component.ts:53 user list []
demo.component.ts:54 roles []
demo.component.ts:53 user list [Object]
demo.component.ts:54 roles []
demo.component.ts:48 data undefined
demo.component.ts:50 roles undefined
demo.component.ts:48 data undefined
demo.component.ts:50 roles undefined
demo.component.ts:53 user list [Object, Object, Object, Object, Object, Object]
demo.component.ts:54 roles undefined
demo.component.ts:48 data undefined
demo.component.ts:50 roles undefined

感谢您的帮助。

Meteor.call是异步的,因此您随后立即执行的日志记录将在返回数据之前执行。您已经设置了回调,应该在其中查找返回的数据


此外,一旦进入回调,就要小心使用“this”。这可能不是你所期望的

结果表明我的问题出在Method.call()中

它返回错误和结果,而不是单个对象

    ///client
    Meteor.call("getRoles", Meteor.userId(), (error, data) => {
      if (!error) {
        console.log("data", data);
        this.roles = data;
        console.log("roles", this.roles);
      } else {
        console.log("error: ", error);
      }
    });

    ///output
demo.component.ts:57 user list []
demo.component.ts:58 roles []
demo.component.ts:57 user list [Object]
demo.component.ts:58 roles []
demo.component.ts:49 data ["admin","spectator","coach","player"]
demo.component.ts:51 roles ["admin","spectator","coach","player"]
demo.component.ts:49 data ["admin","spectator","coach","player"]
demo.component.ts:51 roles ["admin","spectator","coach","player"]
demo.component.ts:57 user list [Object, Object, Object, Object, Object, Object]
demo.component.ts:58 roles ["admin","spectator","coach","player"]
demo.component.ts:49 data ["admin","spectator","coach","player"]
demo.component.ts:51 roles ["admin","spectator","coach","player"]

这正是我所期望的。(虽然不确定为什么流星观测会被触发这么多次。)

我也做了一些更改来测试这一点,并扩展了我的输出,但似乎仍然没有帮助。我在客户机上的角色被初始化为[],并被方法更改为undefined,因此它正在被设置,只是没有被设置为我想要的状态。至少在meI看来,这是如何尝试将服务器返回的内容转换为JSON的,但仍然无法定义返回内容。