Ожидание наблюдаемого ответа с условием if в Angular - PullRequest
0 голосов
/ 26 декабря 2018

У меня проблема с Observable.Написание постановки задачи.

Я получаю заказ от клиента с номером заказа на поставку, но в некоторых случаях в заказе клиента отсутствует номер заказа на покупку, поэтому я просто создаю временный номер заказа на покупку, заполняю его в форме и получаю заказ.но когда я вызываю временную услугу создания номера PO, она не ждет ответа.Проверьте код, приведенный ниже.

Звоните в службу this._partReceivingService.generateTempPo() только в том случае, если условие соответствует, и заполните данные в форме, иначе пользователь будет заполнен заказчиком

if (this.partRecevingForm.controls.ShipperHasNoPO.value == true) {
       this._partReceivingService.generateTempPo().subscribe(res=>{
          this.partRecevingForm.controls.customerOrderNumber.setValue(res.tempPONo);
      })
  }
//then i am executing receiving order service
this._partReceivingService.receiveNewPart(this.partRecevingForm.value).subscribe(data=>{
   //notifications
})

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Наблюдаемые работают асинхронно.Когда вы вызываете их, есть часть вашего кода, которая будет ждать его завершения, но остальная часть вашего кода продолжит работать.Например, эта функция

myFunc() {
    console.log('hello 1');
    this.myservice.getSomething().subscribe(() => console.log('hello 2'));
    console.log('hello 3');
}

выдаст ее в консоли

> hello 1
> hello 3
> hello 2

Таким образом, вам придется поместить свой второй сервисный вызов в subscribe вашего первого сервисного вызова.Кроме того, я бы предложил использовать patchValue() вместо controls.fieldName.setValue()

if (this.partRecevingForm.controls.ShipperHasNoPO.value == true) {
       this._partReceivingService.generateTempPo().subscribe(res=>{
          this.partRecevingForm.patchValue({customerOrderNumber: res.tempPONo});

          this._partReceivingService.receiveNewPart(this.partRecevingForm.value).subscribe(data=>{
             //notifications
          });
      });
} else {
    this._partReceivingService.receiveNewPart(this.partRecevingForm.value).subscribe(data=>{
      //notifications
    })
 } 
0 голосов
/ 27 декабря 2018

Я не могу комментировать, потому что я новичок, но Равелка прав, и если вы не хотите писать один и тот же код дважды, просто поместите его в метод.

0 голосов
/ 26 декабря 2018

Я думаю, вы можете попробовать это:

  receiveNewPart(value) {
    //then i am executing receiving order service
    this._partReceivingService.receiveNewPart(value).subscribe(
      (data)=>   {
                  //notifications
                })
  }


  if (this.partRecevingForm.controls.ShipperHasNoPO.value === true) {
       this._partReceivingService.generateTempPo().subscribe(res=>{
          this.partRecevingForm.controls.customerOrderNumber.setValue(res.tempPONo);
          this.receiveNewPart(this.partRecevingForm.value) // --> here PO number is what u're waiting for.
      })
  } else {
    this.receiveNewPart(this.partRecevingForm.value) // --> here temp PO number
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...