亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Angular 2 - 直接從Observable返回數據

Angular 2 - 直接從Observable返回數據

蝴蝶不菲 2019-08-19 17:06:30
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);});


查看完整回答
反對 回復 2019-08-19
?
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}
查看完整回答
反對 回復 2019-08-19
  • 3 回答
  • 0 關注
  • 1738 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號