2017-09-13 86 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