首页 > 解决方案 > Angular 组件中未调用 RxJs 计时器订阅

问题描述

Angular 组件中不会调用 Rxjs 计时器的订阅回调。该代码似乎可以通过节点在简单的打字稿文件中正常工作,但在角度组件中却无法正常工作。

这是在节点中工作的代码

import { timer, Subject } from 'rxjs';
import { map, takeUntil } from 'rxjs/operators';

function watchForJSFilesLoad() {
  let _stop = new Subject<void>();
  let observable$ = timer(0, 500).pipe(
    map((n) => <any>{n}),
    takeUntil(_stop)
  );

  observable$.subscribe((n) => {
    console.log(n.n);
    if (n.n == 50) {
      console.warn('stop polling.')
      _stop.next();
    }
  });
}

watchForJSFilesLoad();

这是角度组件代码,它具有基本相同的东西

export class TestComponent implements OnInit {
  @ViewChild("pdfViewer") pdfViewer: PdfJsViewerComponent;
  @Input() pdfUrl: any;

  ngOnInit() {
    console.warn("inline rendering component loaded");
    this.watchForJSFilesLoad();
  }

  watchForJSFilesLoad() {
    console.warn("watch for js files load");
    let _stop = new Subject<void>();
    let observable$ = timer(0, 1000).pipe(
      map(() => <any>{}),
      takeUntil(_stop)
    );

    observable$.subscribe(() => {
      console.log("checking if loaded");
      if (condition) {
        console.warn("stop polling.");
        _stop.next();
      }
    });
  }

}

我在订阅中看不到控制台日志。我错过了什么吗?

谢谢。

rxjs@6.2.2

标签: angularrxjs

解决方案


我刚刚将上面的代码复制到 Stackblitz 中,它的工作原理是:

在此处输入图像描述

它显示“检查是否加载”。所以也许其他地方还有其他问题?

你可以在这里找到堆栈闪电战: https ://stackblitz.com/edit/angular-so-210824-deborahk


推荐阅读