【发布时间】:2021-08-24 11:18:38
【问题描述】:
Rxjs 计时器的订阅回调不会在 Angular 组件中调用。该代码似乎可以通过节点在简单的打字稿文件中正常工作,但在角度组件中却无法正常工作。
这是在节点中工作的代码
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
【问题讨论】:
-
您的代码没有任何“错误”。它应该可以工作,所以我想如果你尝试在 stackblitz 中制作一个最小的可重现示例会更好
-
这段代码应该可以工作,至少它会打印一次
checking if loaded。检查你一次condition。 -
它正在打印
watch for js files load。但它甚至不会打印一次checking if loaded。