你不能直接返回值,因爲它是一個異步調用。 異步調用意味着當您的代碼繼續執行時,它將在後臺運行(實際上計劃在稍後執行)。
你也不能在類中直接使用這樣的代碼。它需要移入方法或構造函數。
你可以做的是不是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(...)
或,以便在數據從響應到達時從observable中調用。 這就是爲什麼無法直接返回數據的原因,因爲當someMethod()
完成時,數據尚未收到。
您在那裏有一個錯字,第一個捲曲剎車應該在「res =>」部分之後,如下所示:'res => { return res; }' – Neyxo
@Neyxo非常感謝提示! –