angular - 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
解决方案
我刚刚将上面的代码复制到 Stackblitz 中,它的工作原理是:
它显示“检查是否已加载”。所以也许其他地方还有其他问题?
你可以在这里找到堆栈闪电战: https ://stackblitz.com/edit/angular-so-210824-deborahk
推荐阅读
- autodesk-forge - Autodesk Forge - 属性中的说明项
- selenium - 如何使用 Selenium Webdriver 简化以下代码?
- python-3.x - 如何在 Python 3 sqlite 中使用 UpdateLayerStatistics() 和 GeodesicLength()
- java - 从源代码构建 Netbeans 11.0 时出错
- java - 是否可以自定义 spring 解析查询参数的方式?
- python - 使用分类数据创建堆栈图
- python - 如何模拟/修补 .endswith()?
- react-native - React Native npm 包导致名称重复
- javascript - 是否有 JavaScript 方法/函数可以通过键将对象循环到数组中?
- javascript - 如何使用引导列在 PHP 中连续显示图像和文本?