Rxjs,如何暂停流并等待用户点击

Rxjs, how to pause the stream and wait the user click

我有一个由 http 请求开始的流:

this.myService.getData()

拿到数据后,我有一个过滤算子:

.filter(() => boolean)

在此过滤器中,我想等待用户的回答,例如 'Do you want to continue ?' 然后用户单击 'Yes' 或 'No'。

如果用户点击 'Yes',则数据流会继续。

如果用户点击 'No',则过滤器会完成它的工作。

它与 confirm() 本机函数一起工作正常,但我需要一个自定义模式,我不会使用像 @angular/material 这样的包,因为我想知道如何从头开始。

我很确定在流中使用 Promise 东西是一个好方法。

你是怎么解决的?

在您的组件上初始化一个主题,并在用户单击模式上的任何按钮时调用 .next() 函数。然后将 getData Observable 通过管道传输到 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);
      });
  }

我做了一个简单的 blitzstack。您可能需要根据需要进行调整:https://stackblitz.com/edit/angular-zkx7kf?file=src%2Fapp%2Fhello.component.ts