Вызов RXJS с функцией takeUntil(onDestroy) возвращает отмененные из API post

#angular #rxjs #rxjs-pipeable-operators

Вопрос:

Я добавил нижеприведенные rxjs, и первый сделанный звонок-это сообщение. После добавления takeUntil(onDestroy) API post возвращает отмененную опцию, как показано ниже

введите описание изображения здесь

введите описание изображения здесь

[введите описание изображения здесь3

Если строка takeuntil удалена, сообщение возвращает статус успешного выполнения — 204. Почему возникает эта проблема ?

Комментарии:

1. takeUntil должен быть последним элементом в pipe цепочке, также this.onDestroy должен быть Subject похож: onDestroy = new Subject();

2. что OnDestroy такое ? тема ? где ты будешь делать это дальше ?

3. @robert Я попытался добавить takeUntil в канал после последней карты переключения или после карты , но все равно получаю ту же ошибку

4. @Stavm да, это тема и отписался в ngOnDestroy ngOnDestroy() { this.onDestroy.next(); this.onDestroy.complete(); }

Ответ №1:

Я могу порекомендовать вам этот код для отмены подписки :

 @Component(...)
export class MyComponent implements OnDestroy {
  private unsubscribe: Subject; // boilerplate
  constructor(private heroService: MyApiService) {}
  public ngOnInit(): void {
    this.subscription = this.heroService
      .callSomeServerApi()
      .pipe(takeUntil(this.unsubscribe)) // boilerplate
      .subscribe(() => window.location = 'https://another.site`)
  }
  public ngOnDestroy(): void {
    this.unsubscribe.next(); // boilerplate
    this.unsubscribe.complete(); // boilerplate
  }
}
 

Комментарии:

1. Спасибо за ответ @Rebai Ahmed, но я попробовал тот же callSomeServerApi, который создает API для отправки сообщений, в котором я получаю отмененный ответ в статусе. Также используется та же самая котельная плита.

2. Значит, тебе это не помогает?

3. Нет, как я уже упоминал, я получаю отмененный ответ

4. Что вы подразумеваете под отмененным ответом? разве вы не получили результат?

5. Получите ответ, как в исходном вопросе (см. скриншот). В инструментах разработчика chrome. Я не получаю результата. Ответ о состоянии отменяется вместо 204 или 500