Rxjs, как приостановить поток и ждать, пока пользователь нажмет - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть поток, который начинается с http-запроса:

this.myService.getData()

После получения данных у меня есть оператор фильтра:

.filter(() => boolean)

В этом фильтре я хочу дождаться ответа от пользователя, например «Хотите продолжить?» Затем пользователь нажимает «Да» или «Нет».

Если пользователь нажимает «Да», тогда поток продолжается с данными.

Если пользователь нажимает «Нет», фильтр выполняет свою работу.

Работает нормально с нативной функцией verify (), но мне нужен пользовательский модал, я не буду использовать пакет типа @ angular / material, потому что я хотел бы знать, как это сделать с нуля.

Я почти уверен, что хорошим способом является использование материалов Promise в потоке.

У вас как это решить?

1 Ответ

0 голосов
/ 06 ноября 2018

Инициализируйте тему в вашем компоненте и вызывайте функцию .next (), когда пользователь нажимает любую кнопку на модальной панели. Затем направьте наблюдаемый объект getData в flatMap и оцените следующее значение, выбрасываемое субъектом.

public onModalButtonClick = new Subject<boolean>();
public openModal(): void {
    this.showModal = true;
    this.http.get('https://jsonplaceholder.typicode.com/todos/1').pipe(
      flatMap(data => {
        return this.onModalButtonClick.pipe(
          take(1),
          flatMap((bool) => bool? of(data) : throwError("abort button clicked"))
        )
      }),
      finalize(() => this.showModal = false)
    ).subscribe(data => {
        console.log(data);
      }, error => {
        console.log(error);
      });
  }

Я сделал простой блицстек. Возможно, вам придется настроить это для ваших нужд: https://stackblitz.com/edit/angular-zkx7kf?file=src%2Fapp%2Fhello.component.ts

...