gpt4 book ai didi

javascript - 如何在 takeUntil rxjs 函数之后采取行动

转载 作者:行者123 更新时间:2023-12-05 00:36:29 24 4
gpt4 key购买 nike

因此,如果函数运行的时间足够长以触发在计时器上运行的 takeUntil 函数,我试图让 bool 值为真。
这是代码

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 确实被解雇,我希望将 bool 值设置为 true。 timeout = true;我一直在看这个stackoverflow帖子
Do some action after takeUntil
但事情并没有我想要的那么清楚。

最佳答案

您可以使用 merge运算符(operator)并重复使用您的 takeUntil创建映射 true 的条件条件 ( endtimer ) 触发时的值:

const { Subject, merge } = rxjs;
const { takeUntil, mapTo } = rxjs.operators;

const source$ = new Subject();
const condition$ = new Subject();

// Use the merge to work around your completed observable
const result$ = merge(
// When your condition fires map this event to true
condition$.pipe(mapTo(true)),
// Your already existing pipe in wich the takeUntil lives
source$.pipe(
takeUntil(condition$)
)
)

result$.subscribe(console.log)

source$.next(1);
source$.next(2);
condition$.next();
source$.next(3);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>

仅供引用:我不确定此解决方案是否适用于您的应用程序上下文,因为您没有显示 timeout 的位置正在声明和设置。

关于javascript - 如何在 takeUntil rxjs 函数之后采取行动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66539763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com