非同期呼び出しであるため、値を直接返すことはできません。 非同期呼び出しは、コードが実行されている間にバックグラウンドで実行されていることを意味します(後で実行するように実際にスケジュールされています)。
また、このようなコードをクラスに直接入れることはできません。メソッドまたはコンストラクタに移動する必要があります。あなたは何ができるか
は直接subscribe()
にではなく、またmap()
export class DataComponent{
someMethod() {
return this.http.get(path).map(res => {
return res.json();
});
}
}
のような演算子を使用し、あなたが同じ観測で複数の.map
を組み合わせることができますように、時にはこれは、コードの明瞭さを向上させ、別のものを保持します。例:
validateResponse = (response) => validate(response);
parseJson = (json) => JSON.parse(json);
fetchUnits() {
return this.http.get(requestUrl).map(this.validateResponse).map(this.parseJson);
}
この方法で観察できるが、発信者が、発信者はまた、別のクラスにすることができ
export class DataComponent{
someMethod() {
return this.http.get(path).map(res => {
return res.json();
});
}
otherMethod() {
this.someMethod().subscribe(data => this.data = data);
}
}
を購読することができます戻るだろう。ここでは簡潔にしています。
data => this.data = data
と
res => return res.json()
矢印関数です。それらは通常の機能に似ています。これらの関数は、subscribe(...)
またはmap(...)
に渡され、応答からデータが到着したときにobservableから呼び出されます。 これは、someMethod()
が完了すると、データがまだ受信されなかったため、データを直接返すことができない理由です。私の知っている
あなたはタイプミスがあります。最初のブレーキは、次のように "res =>"部分の後にする必要があります: 'res => { return res; } ' – Neyxo
@Neyxoはヒントに感謝します! –