Подписаться наКомплект никогда не завершается с flatMap - PullRequest
0 голосов
/ 23 сентября 2018

Я использую Angular 6 с RxJS 6.2.2 и RxJS Compact 6.2.2.

У меня есть код для вызова моей службы API для загрузки некоторых записей:

this.route.params
  .flatMap((params: Params) => {
    if (!params['id']) {
      return Observable.throwError('Id is not specified.');
    }

    this.itemId = params['id'];
    this.isEditMode = true;
    this.loadCategoryGroupCondition = new LoadCategoryGroupViewModel();
    this.loadCategoryGroupCondition.id = [this.itemId];
    this.loadCategoryGroupCondition.pagination = new Pagination();

    return this.categoryGroupService
      .loadCategoryGroup(this.loadCategoryGroupCondition);
  })
  .subscribe(
    (loadCategoryGroupResult: SearchResult<CategoryGroup>) => {
      console.log(loadCategoryGroupResult);
    },
    () => {},
    () => {
      console.log('Completed')
    });

Приведенный выше код может распечатать список моих товаров, возвращенных из моей службы API.Это означает, что onSuccess был вызван.

Но полный метод запущен.Что не так с моим кодом?

Спасибо,

1 Ответ

0 голосов
/ 23 сентября 2018

Как уже говорилось, оператор flatMap сам не завершает свой наблюдаемый источник.Вы используете this.route.params в качестве источника наблюдения, который является долгоживущим - он никогда не завершается сам по себе.

Чтобы получить уведомление complete, вы можете использовать оператор, такой как take.Он переиздаст количество элементов, которые вы передадите в качестве параметра, и завершите их позже.Например, если вы просто хотите получить текущий маршрут и не заинтересованы в дальнейших уведомлениях о вашем наблюдаемом источнике, используйте take(1), например:

this.route.params
  .take(1)
  .flatMap((params: Params) => {

Также обратите внимание, что рекомендуемый способ сделать этов RxJS 6+ используются конвейерные операторы.Это будет выглядеть так:

this.route.params.pipe(
  first(),
  mergeMap((params: Params) => {
  ...
})

Я также заменил операторы на более новые рекомендуемые варианты.

...