takeUntil rxjs函数后如何采取措施

克里斯托弗·雅各布(Christopher Jakob)

因此,如果运行的函数运行足够长的时间以触发在计时器上运行的takenUntil函数,我将尝试使布尔值为true。

这是代码

start = this.http.get(environment.shochat_content_creator_set_valid_stream_start).pipe(
    tap(() => console.log('Stream start'))
  );

  poll = this.http.get(environment.check_if_stream_is_active_on_mux).pipe(
    tap(() => {
        this.streamready = true;
        return 0;
      }
      ),
    catchError(error => {
      console.log(error);
      return EMPTY;
    })
  );

  startastream(){
    const endtimer = timer(60000);
    this.streampollsubscription = this.start.pipe(
      switchMap(() => timer(0, 5000).pipe(
        tap(() => console.log('Polling every 5s')),
        mergeMap(() => this.poll)
      )),
      takeUntil(endtimer)
    ).subscribe();

  }

本质上,如果takeUntil被触发,我希望将布尔值设置为true。

timeout = true;

我一直在看这个stackoverflow帖子

在takeUntil之后做一些动作

但是事情并没有我想的那么清楚。

比兹鲍勃

takeUntil 完成可观察的操作,因此要在完成操作后执行操作,可以在几个地方进行:

  1. completion处理程序中:
this.start.pipe(
    switchMap(() => timer(0, 5000).pipe(
        tap(() => console.log('Polling every 5s')),
        mergeMap(() => this.poll))
    ),
    takeUntil(endtimer)
)
.subscribe(
    next  => console.log('handling next value'),
    error => console.log('handling error'),
    ()    => this.timeout = true    // <--- this fires after observable completes
);
  1. 使用finalize运算符:
this.start.pipe(
    switchMap(() => timer(0, 5000).pipe(
        tap(() => console.log('Polling every 5s')),
        mergeMap(() => this.poll))
    ),
    takeUntil(endtimer),
    finalize(() => this.timeout = true)
)
.subscribe();

注意:这些解决方案并不完全符合您的要求。的确,它们会在takeUntil触发触发,但由于流完成的任何其他原因,它们也会触发。我认为区别对您而言并不重要,但想在整个问题中提及。

正如Sang Dang在评论中提到的那样,您还可以从“计时器关闭时(而不是到目前为止我提到的内容,当可观察的对象完成时”)的角度来进行处理,只需添加一个tap给你的计时器。

const endtimer = timer(60000).pipe(
    tap(() => this.timeout = true)
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Object(...)(...)。takeUntil不是函数

来自分类Dev

如何实现列表的“ takeUntil”?

来自分类Dev

RxJS:takeUntil忽略Subject事件

来自分类Dev

rxjs takeUntil 不执行finalize

来自分类Dev

在haskell中制作takeUntil函数

来自分类Dev

Haskell是否具有takeUntil函数?

来自分类Dev

如何对baconJS中的takeUntil流做出反应

来自分类Dev

如何对baconJS中的takeUntil流做出反应

来自分类Dev

Angular RxJS可观察:带订阅的takeUntil与取消订阅

来自分类Dev

rxjs takeuntil,检查直到可观察源有效

来自分类Dev

如何使用TakeUntil提前终止可观察链?

来自分类Dev

如何使用TakeUntil提前终止可观察链?

来自分类Dev

如何在 Angular 5 中使用 combineLatest 和 takeUntil rxjs 运算符

来自分类Dev

forkJoin上的takeUntil是否在forkJoined观察对象上调用该函数?

来自分类Dev

打开FCM通知后如何采取措施/移动屏幕?

来自分类Dev

TakeUntil无法按记录工作?

来自分类Dev

Rx.NET TakeUntil 示例

来自分类Dev

Pytest:如何对测试失败采取措施?

来自分类Dev

如何对某些对象实例采取措施?

来自分类Dev

RxJava takeUntil到最后一项?

来自分类Dev

ReactiveCocoa takeUntil:不发送完成信息吗?

来自分类Dev

Java流TakeUntil 100元滤波/收集

来自分类Dev

在Laravel中创建,更新或删除任何模型后采取措施

来自分类Dev

在命令运行期间超时后采取措施

来自分类Dev

在lilypond中采取一些措施后断开线

来自分类Dev

在命令运行期间超时后采取措施

来自分类Dev

杀死后台脚本后立即采取措施

来自分类Dev

点击“提交”按钮后不应采取任何措施(Adobe Livecycle)

来自分类Dev

如何检查Promise返回的值并在angularjs中采取措施?

Related 相关文章

热门标签

归档