使用angular-meteor通过Meteor.methods在服务器和客户端之间发送数组

问题描述:

我试图让我的服务器管理一个数组并将其分享给我的客户端。我想通过创建一个getter方法来实现Meteor.methods()。 尽管由于某种原因它打印到控制台正确的服务器,但返回未定义的客户端当我做Meteor.call() 我得到未定义的返回值,无论if是true还是false,它总是未定义的。使用angular-meteor通过Meteor.methods在服务器和客户端之间发送数组

///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 

感谢您的任何帮助。

+0

我试图从服务器转换成返回JSON也仍然得到了一个未定义回来。 –

原来,我的问题是在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"] 

这是我期待的。(虽然不知道为什么MeteorObservable触发很多次。)

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

此外,一旦在回调中,请注意使用“this”。这可能不是你期望的。

+0

我做了一些更改来测试这一点,并扩展了我的输出,但它似乎还没有帮助。 我在客户端的角色被初始化为[],并被方法更改为未定义,所以它正在被设置,而不是被设置为我想要的。至少它是如何在我看来 –