Как отменить действия по отправке ngxs - PullRequest
1 голос
/ 02 апреля 2020

Как отменить текущее действие store.dispatch(xxx), чтобы также отменялись базовые http-запросы?

Я пытался .unsubscribe() из store.dispatch(new FetchSomeStuffOverHttp()) вызова и ожидал, что базовый http-запрос также отменяется.

Но он будет продолжать работать, даже если наблюдаемое httpClient возвращается действием:

@Action(FetchStuffOverHttp)
fetchStuffOverHttp({ patchState }: StateContext<AuftragStateModel>) {
  return this.httpClient.get(...)
                        .pipe(
                            tap((...) => {  patchState(...) })
                         )
}

Это ожидаемое поведение, которое store.dispatch(xxx).subscribe().unsubscribe() не отписаться / отменить httpClient s наблюдаемый?

В отличие от этого, опция { cancelUncompleted: true } отменяет подчиненный http-запрос.

1 Ответ

1 голос
/ 03 апреля 2020

В: Как отменить текущее действие store.dispatch (xxx), чтобы также отменялись базовые http-запросы?

A: Если базовый http-запрос находится в наблюдаемой цепочке, возвращаемой действие (то есть асинхронное действие c), то отправка того же действия с помощью { cancelUncompleted: true } отменит предыдущее действие отправки, если оно все еще выполняется.

Если вы хотите отменить запущенное асинхронное действие c без отправив его снова, вам придется самостоятельно обработать его из наблюдаемого действия (например, используя соответствующие шаблоны rx js, например, оператор takeUntil()).

Q: Это ожидаемое поведение store.dispatch (xxx) .subscribe (). unsubscribe () не отменяет подписку / отмену наблюдаемых httpClients?

A: Да. AFAIK, это дизайн и ожидаемое поведение.

...