2017-09-13 124 views
-2

我在我的組件中有一個服務,這個服務有一個方法從服務器返回一個字符串值。Observable訂閱時間問題

服務:

getOrderBarcode(): Observable<string> { 
    return this.http.get(this.baseUrl + 'barcode/getbarcode') 
     // .map(this.extractData); 
     .map(res => res as string) 
} 

組件:

let barcodeService = this.barcodeService.getOrderBarcode(); 
debugger; 
barcodeService.subscribe(result => order.OrderBarcode = result); 
console.log(order.OrderBarcode); 
// rest of the logic 

然而,當.subscribe把它叫做是不是在這一點上綁定的值,調試我發現,它在執行之後應用價值後,班上的一切,我怎樣才能解決這個問題?

更新基於該意見,並鏈接到另一個問題

服務方法:

getSomething(callback: (data) => void) { 
    debugger; 
    return this.http.get(this.baseUrl + 'barcode/getbarcode') 
     // .timeout(1000) 
     // .map(this.extractData); 
     .map(res => res as string) 
} 

組件:

let a = this.barcodeService.getSomething((data) => { 
    debugger; 
    console.log(data); 
}); 

此調試器不被擊中......

+0

這就是*究竟應該發生什麼*。你訂閱和使用observables的全部原因是**這個過程是異步**。 – jonrsharpe

+0

[Angular 2 - 直接從Observable返回數據]的可能副本(https://stackoverflow.com/questions/37867020/angular-2-return-data-directly-from-an-observable) – jonrsharpe

+0

好的,謝謝你指點我在正確的方向,如果我返回一個單一的值而不是一個流,是否可以在這裏使用承諾呢? – Haris

回答

-1

您的示例代碼

barcodeService.subscribe(result => order.OrderBarcode = result); 
console.log(order.OrderBarcode); 

修復

使用toPromise並等待結果(或使用then)。

更多:https://www.learnrxjs.io/operators/utility/topromise.html

+0

爲什麼有人將一個observable轉換爲諾言只是爲了調試?這只是開銷。do操作符是爲了這個 –

+0

謝謝,我確實想知道這個,但是我會發現上面提到的那個意見。你能擴大一點嗎? – Haris