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

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

angular 2如何從訂閱返回數據

angular 2如何從訂閱返回數據

炎炎設計 2019-09-24 16:39:45
這就是我想做的。@Component({   selector: "data",   template: "<h1>{{ getData() }}</h1>"})export class DataComponent{    this.http.get(path).subscribe({       res => return res;    })}如果getData在中被調用DataComponent,您可能會建議將其分配給變量like this.data = res并使用i like {{data}}。但是{{getData}}出于個人目的,我需要使用like 。請提出建議?
查看完整描述

3 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

您只是不能直接返回該值,因為它是一個異步調用。異步調用意味著在代碼繼續執行的同時,它正在后臺運行(實際上已安排在以后執行)。


您也不能直接在類中有這樣的代碼。需要將其移至方法或構造函數中。


您可以做的不是subscribe()直接使用而是使用像map()


export class DataComponent{

    someMethod() {

      return this.http.get(path).map(res => {

        return res.json();

      });

    }

}

另外,您可以將多個對象.map與相同的Observables 結合使用,因為有時這可以提高代碼的清晰度,并使事情分開。例:


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(...)或map(...)從可觀察對象調用。這就是為什么不能直接返回數據的原因,因為someMethod()完成后還沒有收到數據。


查看完整回答
反對 回復 2019-09-24
  • 3 回答
  • 0 關注
  • 989 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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