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

天涯盡頭無(wú)女友
TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
由于http調(diào)用等是異步的,因此Observable
返回一個(gè)而不是同步值。你必須訂閱它,并在那里的回調(diào)中獲得數(shù)據(jù)。沒有辦法解決這個(gè)問題。
一種選擇是將您的邏輯放在subscribe
通話中
getSomething() { return this._restService.addRequest('object', 'method').run() .subscribe( res => { // do something here res; }, err => { console.error(err); } );}
但我喜歡這樣做的方法是添加一個(gè)回調(diào),從外部注入邏輯(可能是一個(gè)組件,也許是另一個(gè)服務(wù)):
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貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
我自己沒有使用它,但我相信它應(yīng)該在理論上起作用(:
//?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 關(guān)注
- 1763 瀏覽
添加回答
舉報(bào)
0/150
提交
取消