Проверьте, завершена ли наблюдаемая - PullRequest
3 голосов
/ 12 апреля 2019

Мне нужно показать тост после завершения наблюдения, как я могу это сделать, мой код:

this.commerceCtrl.UpdateCategories(this.toSave).subscribe(data => {
  }, error => {
    this.mainFunction.showError(error)
  }),
  complete => {
    this.mainFunction.showToast(this.localization.message_ok)
  }

Я пытался сделать так:

this.commerceCtrl.UpdateCategories(this.toSave).subscribe(data => {
  }, error => {
    this.mainFunction.showError(error)
  }),
  () => {
    this.mainFunction.showToast(this.localization.message_ok)
  }

но это не работает

Ответы [ 3 ]

6 голосов
/ 12 апреля 2019

Вы должны передать обработчик complete в качестве третьего аргумента для подписки.

В своем коде просто переместите закрывающую скобку в конец.

Измените этот код:

this.commerceCtrl.UpdateCategories(this.toSave).subscribe(data => {
  }, error => {
    this.mainFunction.showError(error)
  }), // <===== Remove this parenthesis
  () => {
    this.mainFunction.showToast(this.localization.message_ok)
  }; // <====== It should be here

К этому:

this.commerceCtrl.UpdateCategories(this.toSave).subscribe(
  data => {
    // next handler body
  }, error => {
    this.mainFunction.showError(error)
  }, () => {
    this.mainFunction.showToast(this.localization.message_ok)
  }
);
2 голосов
/ 12 апреля 2019

Вы можете присвоить объектный параметр функции subscribe():

this.commerceCtrl.UpdateCategories(this.toSave).subscribe({
   next: value => { ... },
   error: err => { ... },
   complete: () => { ... }
});
0 голосов
/ 12 апреля 2019

Вы можете попробовать использовать наконец метод

this.commerceCtrl.UpdateCategories(this.toSave).finally(() => {
    // complete
}).subscribe((data) => {
    // success
}, (error) => {
    // error
});

Источник: https://github.com/angular/angular/issues/7865#issuecomment-204408637

...