fir*_*baa 12 javascript rxjs typescript ecmascript-6 angular
在我的角度应用程序中,我正在使用这种处理方法
myMethod(){
...
setTimeout(() => {
this.router.navigate(['mucomponent']);
});
}
Run Code Online (Sandbox Code Playgroud)
正如我被告知的:setTimeout 没有延迟(0)似乎等待下一个蜱虫完成所有治疗后开始我的治疗。这是近期的计划。
因为我需要这种行为
是否有任何干净的替代方法可以用typescript或rxjs做同样的事情来做得更好?
建议?
geo*_*-un 14
尽管所接受的答案在技术上可能可行,但它远非理想。RxJS 团队asapScheduler正是为此用例创建的。
asapScheduler.schedule(() => this.router.navigate(['mucomponent']));
Run Code Online (Sandbox Code Playgroud)
来自RxJS 文档:
asap 调度程序将尽力缩短当前执行代码结束和计划任务开始之间的时间。这使得它成为执行所谓“延迟”的最佳候选者。传统上,这是通过调用 来实现的
setTimeout(deferredTask, 0),但该技术涉及一些(尽管最小)不需要的延迟。
Ban*_*i29 11
可以使用Interval或者接收rxjs;
import { interval } from 'rxjs';
import { take} from 'rxjs/operators';
myMethod() {
interval(0).pipe(take(1),
).subscribe(value =>
this.router.navigate(['mucomponent']);
}
Run Code Online (Sandbox Code Playgroud)
Stv*_*dll 10
这应该可行,并且比以前的解决方案更简单:
timer(0).subscribe(time => this.router.navigate(['mucomponent']));
Run Code Online (Sandbox Code Playgroud)
timer() 有 2 个参数,第二个参数是可选的。如果提供2个参数,第一个参数是延迟,第二个参数是周期。如果只提供一个参数,那就是延迟,定时器只会发出 1 个值(不会重复)。
来自timer()的文档:
如果未指定 period(第二个参数),则输出 Observable 仅发出一个值 0。
参考: https: //rxjs-dev.firebaseapp.com/api/index/function/timer
| 归档时间: |
|
| 查看次数: |
14727 次 |
| 最近记录: |