Angular 2 - 直接從Observable返回數據我一直在試圖解決這個問題,而且我已經能夠閱讀的任何文檔都沒有給我一個問題的答案。我有一個直接與API通信并返回可觀察事件的服務,在正常情況下我會訂閱并按照數據執行我想要的操作,但是在使用來自restful服務的請求的輔助服務中,我需要能夠從請求中返回值。getSomething() {
return this._restService.addRequest('object', 'method').run()
.subscribe(
res => {
res;
},
err => {
console.error(err);
}
);}returnSomething() {
return this.getSomething();}在上面的快速示例中,我想知道是否有任何方法可以res從getSomething()內部返回returnSomething()。如果以這種方式無法實現,那么替代方案是什么?我將補充說_restService非常依賴,我真的不想開始搞亂它。
3 回答

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
由于http調用等是異步的,因此Observable
返回一個而不是同步值。你必須訂閱它,并在那里的回調中獲得數據。沒有辦法解決這個問題。
一種選擇是將您的邏輯放在subscribe
通話中
getSomething() { return this._restService.addRequest('object', 'method').run() .subscribe( res => { // do something here res; }, err => { console.error(err); } );}
但我喜歡這樣做的方法是添加一個回調,從外部注入邏輯(可能是一個組件,也許是另一個服務):
getSomething(callback: (data) => void) { return this._restService.addRequest('object', 'method').run() .subscribe( res => { callback(res); }, err => { console.error(err); } );}
在您的組件或任何地方:
this._yourService.getSomething((data) => { // do something here console.log(data);});

GCT1015
TA貢獻1827條經驗 獲得超4個贊
我自己沒有使用它,但我相信它應該在理論上起作用(:
//?service.tsgetSomething()?{ ??let?subject:?Subject?=?new?Subject(); ??this._restService.addRequest('object',?'method').run() ????.subscribe(subject); ??return?subject;}//?this?can?be?removed?(;returnSomething()?{ ??return?this.getSomething();}//?component.tsngOnInit()?{ ??this.service.returnSomething() ????.subscribe(res?=>?console.log(res),?err?=>?console.log(err));}
您可以使用不同類型的主題,例如,BehaviorSubject具有value
您可以訪問的屬性...
ngOnInit()?{ ??//?if?you?use?BehaviorSubject ??this.service.returnSomething().value}
- 3 回答
- 0 關注
- 1738 瀏覽
添加回答
舉報
0/150
提交
取消