如何在Angular2中使用subscribe

时间:2016-06-21 13:31:22

标签: angular

我想检索客户下的所有订单。 所以,在我的组件中,我写的如下。

ngOnInit() {
    this.customerId = this.getCustomer();
    this.orderHistoryItems = this.getOrders();
}

getCustomer(): string {
    this._accountService.getCustomer()
        .subscribe((response) => {
            if (response.GeneralStatus.toString() === 'Success') {
                return response.Result.CustomerId;
            }
        });
    return "";
}

getOrders(): OrderHistory[] {

    this._trackOrdersService.getOrders(this.customerId)
        .subscribe((response) => {
            if (response.GeneralStatus.toString() === 'Success') {
                return response.Result;
            } 
        });
    return [];
}

当我调用此内容时,我第一次将customerId设为undefined 。如果上述subscribe方法中的getCustomer()条件中的条件,则控件甚至无法输入。 如果我重新加载同一页面,那么我也会获得customerId和订单。我已经为getCustomergetOrders编写了相应的http来电,如下所示。

getOrders(custId) {
    return this._http.get(`${this.apiUrl}GetOrders?CustomerID=${custId}`, { headers: this.headers })
        .retry(2)
        .map(function (res) {
            return res.json();
        });
}

getCustomer(): Observable<ApiResponse<Customer, string>> {
    return this._http.get('${this.apiUrl}LoggedInCustomer', { headers: this.headers })
        .retry(2)
        .map((response) => response.json())
        .catch(this.handleError);
}

如果上述代码有任何错误,请帮助我。

1 个答案:

答案 0 :(得分:0)

我认为您试图在subscribe调用中返回结果,这将无效,因为您使用的是内联函数。

一种方法是再次返回Observable或传递这样的回调:

ngOnInit() {
    this.getCustomer((id) => {
        this.customerId = id;
    });

    this.getOrders((orderItems) => {
        this.orderHistoryItems = orderItems;
    });
}

getCustomer(callback: (id) => void) {
    this._accountService.getCustomer()
        .subscribe((response) => {
            if (response.GeneralStatus.toString() === 'Success') {
                callback(response.Result.CustomerId);
            }
        });
}

getOrders(callback: (orderItmes: OrderHistory[]) => void) {

    this._trackOrdersService.getOrders(this.customerId)
        .subscribe((response) => {
            if (response.GeneralStatus.toString() === 'Success') {
                callback(response.Result);
            }
        });
}