rmc*_*rry 1 javascript settimeout rxjs angular
在一些地方我需要调用setTimeout,例如:
setTimeout(() => this.isSaving[index] = false, 500);
Run Code Online (Sandbox Code Playgroud)
当我的组件被销毁时,该超时会继续发出吗?换句话说,我需要捕获返回的observable,如下所示:
this.subTimeout = setTimeout(() => this.isSaving[index] = false, 500);
Run Code Online (Sandbox Code Playgroud)
然后取消在我的破坏钩子中:
ngOnDestroy() {
this.subTimeout.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)
如果我必须在我的组件中启动几个setTimeout,这会很费力.有没有更简单的方法来摧毁它们?就像使用takeUntil(destroy $)一样?
我是否需要取消订阅setTimeout调用?...当我的组件被销毁时,该超时是否会继续发出?
您无需担心重复执行回调.setTimeout只执行一次它就死了.通常很好的做法是考虑时间将耗尽的可能性,并且回调仅在组件被销毁之后才执行.在我自己的应用程序中,我将所有需要撤消的订阅都放入数组中,并且我有一个标准的批量取消订阅作业ngOnDestroy.您的超时也可以这样做:
// component property
timeOutIDs:number[] = [];
...
// triggering a timeout and capturing the id
this.timeOutIDs.push(
setTimeout(() => this.isSaving[index] = false, 500)
);
...
// inside ngOnDestroy
this.timeoutIDs.forEach(id => clearTimeout(id));
Run Code Online (Sandbox Code Playgroud)
使用这种方法,您不需要多个变量来存储不同的超时ID,并且如果始终push是setTimeoutids数组中的返回值,则可以确保所有超时都将被正确清除.
附加说明:您应该始终取消setInterval呼叫并始终取消订阅开放式订阅.
| 归档时间: |
|
| 查看次数: |
2769 次 |
| 最近记录: |