【问题标题】:Call function immediately and every X seconds立即和每 X 秒调用一次函数
【发布时间】:2019-04-08 22:25:03
【问题描述】:

使用 Angular 7 如何立即和每 X 秒调用一次函数? 这是我在服务中的功能:(仅作为示例)

checkData(): Observable<string> {
    return this.http.get('')
        .pipe(
            map(res => {
                let result;
                result = {
                    packageNumber: this.packageNumber,
                };
                return result;
            })
        );
}

在我的组件中,我尝试了这样的事情:

private killTrigger: Subject<void> = new Subject();
private fetchData$: Observable<string> = this.packageService.checkData();

private refreshInterval$: Observable<string> = timer(0, 1000)
    .pipe(
        takeUntil(this.killTrigger),
        switchMap(() => this.fetchData$),
        catchError(error => of('Error'))
    );

如何让它发挥作用?

【问题讨论】:

  • 我想你在找interval
  • @WillCain 可以立即使用吗?
  • timer(0, 1000) 已经这样做了。你订阅了吗?
  • @ChrisK。如果想在没有初始延迟的情况下开始发射,请使用 timer
  • timer(0, 1000).pipe(...).subscribe(...)

标签: angular typescript rxjs angular7


【解决方案1】:

您需要订阅它才能启动它。最好的办法是:

// class def
private subscription: Subscription;
// in NgOnInit
this.subscription = this.refreshInterval$.subscribe(noop)
// in NgOnDestroy
this.subscription.unsubscribe(); // avoid memory leaks

要真正解雇您的fetchData$,您可以将您的switchMap 调用替换为:

map(() => this.fetchData$.subscribe(noop),

如果你不订阅 observable,它永远不会被触发。不明白为什么需要switchMap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2012-03-14
    • 2011-11-06
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多