可观察的订阅时间问题

时间:2017-09-13 21:58:20

标签: javascript angular typescript rxjs angular2-services

我的组件中有一个服务,此服务有一个从服务器返回字符串值的方法。

服务:

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);
});

这个调试器没有被击中......

1 个答案:

答案 0 :(得分:-1)

您的示例代码

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

修复

使用toPromise并等待结果(或使用then)。

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