2017-01-10 3 views
0

私のサーバーで管理する配列を取得しようとしていて、クライアントに共有されています。私はMeteor.methods()がゲッタメソッドを作成することでそれを行う方法であると考えました。 私はMeteor.call()を実行すると何らかの理由でサーバにコンソールに正しく出力しますが、クライアントに未定義を返します。 ifがtrueかfalseかにかかわらず未定義の戻り値を取得します。角度メーターを使った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内の他の方法は、()完璧に動作し、私はそれがそんなに少なくないとしてこの1つは見ていない理由を動作するように見えることはできません。

///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に、サーバからのリターンを変換しようとしたし、まだ未定義の背中を取得します。 –

答えて

0

は私の問題は、それがエラーと結果ではなく、単一のオブジェクトを返す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は何度もトリガーされる理由はわからないが。)

1

Meteor.callは非同期なので、データが返される前にすぐに実行されるログが実行されます。あなたはすでにあなたのコールバックを設定している、あなたはそこに返されたデータを探している必要があります。

また、コールバックの内部では、「this」の使用に注意してください。おそらくそれがあなたが期待するものではありません。

+0

これをテストして出力を拡大するためにいくつか変更を加えましたが、それでもまだ役に立たなかったようです。 クライアント上の私の役割は[]で初期化され、メソッドによって未定義に変更されるため、設定されています。 atleastそれは私にどのように見えるか –

関連する問題