2017-09-13 6 views
-2

コンポーネントにサービスがあり、このサービスはサーバーから文字列値を返すメソッドを持っています。観測可能な購読タイミングの問題

サービス:

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

コンポーネント:.subscribeが、それは私がそれを実行した後に値を適用することがわかったデバッグした後、この時点で値をバインドされていないと呼ばれているが

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

、どのクラスでもこの問題を回避するにはどうすればいいですか?

別の質問へのコメントやリンクに基づいてUPDATE

サービス方法:

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

*これはまさに起こりそうなことです*。サブスクリプションとオブザーバブルを使用している理由は、**プロセスは非同期です**。 – jonrsharpe

+0

[角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

関連する問題