与打字稿角度5同步

时间:2018-10-27 13:14:44

标签: javascript angular typescript

我有以下代码。

public async getOrderInforAsync(customerOrderId) {
	return new Promise((resolve, reject) => {
          this.orderEntryService.getCommissionIncentives(customerOrderId)
        .subscribe(
          response => {
            Object.assign(this.order, response);
            this.order.bookingDate = this.order.bookingDate ? new Date(this.order.bookingDate) : null;
            this.order.estBillDate = this.order.estBillDate ? new Date(this.order.estBillDate) : null;
            this.order.orderSplit.forEach(element => {
              element.rcNumberFullName = `${this.order.customerOrderRCNumber}${element.rcNumberSuffix}`;
            });
            this.initialQuantityAllocated();
            this.orderSummary.allocatedEstCommissionPercent = this.calculateTotalOrderPercent();
            this.orderSummary.allocatedEstCommissionAmount = this.calculateTotalOrderAmount();
            this.highlight = this.checkOrderSummary(this.orderSummary.allocatedEstCommissionPercent, this.orderSummary.allocatedEstCommissionAmount);
            this.calculateAllocatedActualPercent();
            this.calculateAllocatedActualAmount();
            this.onChangeEstSalesPrice();
            resolve();
          },
          error => {
            reject();
          }
        );
    });
}

有时,在this.calculateAllocatedActualPercent()和this.calculateAllocatedActualAmount()完成之前,调用resolve()。 那么如何使此代码同步运行,是否意味着此块代码上的所有功能都在调用resolve()之前完成了?

2 个答案:

答案 0 :(得分:0)

一个async函数返回一个Promise。要将函数声明为async,您需要在其中调用await

更改从this.orderEntryService.getCommissionIncentives(customerOrderId) .toPromise()返回的可观察值,然后await

尝试一下:

public async getOrderInforAsync(customerOrderId) {

  try {
    const response = await this.orderEntryService
      .getCommissionIncentives(customerOrderId).toPromise();

    this.order = { ...response };
    this.order.bookingDate = this.order.bookingDate ? new Date(this.order.bookingDate) : null;
    this.order.estBillDate = this.order.estBillDate ? new Date(this.order.estBillDate) : null;

    for (let i = 0; i < this.order.orderSplit; i++) {
      const element = this.order.orderSplit[i];
      element.rcNumberFullName = `${this.order.customerOrderRCNumber}${element.rcNumberSuffix}`
    }
    this.initialQuantityAllocated();
    this.orderSummary.allocatedEstCommissionPercent = this.calculateTotalOrderPercent();
    this.orderSummary.allocatedEstCommissionAmount = this.calculateTotalOrderAmount();
    this.highlight = this.checkOrderSummary(this.orderSummary.allocatedEstCommissionPercent, this.orderSummary.allocatedEstCommissionAmount);
    this.calculateAllocatedActualPercent();
    this.calculateAllocatedActualAmount();
    this.onChangeEstSalesPrice();
    return response;
  } catch (error) {
    return error;
  }
}

答案 1 :(得分:0)

尝试一下:

public async getOrderInforAsync(customerOrderId) {
    return new Promise((resolve, reject) => {
          this.orderEntryService.getCommissionIncentives(customerOrderId)
        .subscribe(
          response => {
            Object.assign(this.order, response);
            this.order.bookingDate = this.order.bookingDate ? new Date(this.order.bookingDate) : null;
            this.order.estBillDate = this.order.estBillDate ? new Date(this.order.estBillDate) : null;
            this.order.orderSplit.forEach(element => {
              element.rcNumberFullName = `${this.order.customerOrderRCNumber}${element.rcNumberSuffix}`;
            });
            this.initialQuantityAllocated();
            this.orderSummary.allocatedEstCommissionPercent = this.calculateTotalOrderPercent();
            this.orderSummary.allocatedEstCommissionAmount = this.calculateTotalOrderAmount();
            this.highlight = this.checkOrderSummary(this.orderSummary.allocatedEstCommissionPercent, this.orderSummary.allocatedEstCommissionAmount);
            await this.calculateAllocatedActualPercent();
            await this.calculateAllocatedActualAmount();
            this.onChangeEstSalesPrice();
            resolve();
          },
          error => {
            reject();
          }
        );
    });
}

async calculateAllocatedActualPercent(){
  return new Promise(resolve,reject){
    // call api 
    if (data)
      resolve(data);
    else 
      reject()
  }
}

async calculateAllocatedActualAmount(){
  return new Promise(resolve,reject){
    // call api 
    if (data)
      resolve(data);
    else 
      reject()
  }
}