3 回答

TA貢獻1851條經(jīng)驗 獲得超5個贊
您只是不能直接返回該值,因為它是一個異步調(diào)用。異步調(diào)用意味著在代碼繼續(xù)執(zhí)行的同時,它正在后臺運行(實際上已安排在以后執(zhí)行)。
您也不能直接在類中有這樣的代碼。需要將其移至方法或構(gòu)造函數(shù)中。
您可以做的不是subscribe()直接使用而是使用像map()
export class DataComponent{
someMethod() {
return this.http.get(path).map(res => {
return res.json();
});
}
}
另外,您可以將多個對象.map與相同的Observables 結(jié)合使用,因為有時這可以提高代碼的清晰度,并使事情分開。例:
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()
是箭頭功能。它們類似于正常功能。當(dāng)數(shù)據(jù)從響應(yīng)到達時,這些函數(shù)將傳遞到可觀察對象subscribe(...)或map(...)從可觀察對象調(diào)用。這就是為什么不能直接返回數(shù)據(jù)的原因,因為someMethod()完成后還沒有收到數(shù)據(jù)。
添加回答
舉報