Ala*_*ect 7 javascript rxjs typescript angular
要访问当前 URL 路径中的组件,在我的应用程序中执行以下操作:
constructor(private route: ActivatedRoute) { }
...
load() {
this.route.params.subscribe((params) => {
const id = +params['id'];
console.log('got parameter', id);
... etc
Run Code Online (Sandbox Code Playgroud)
这是教科书案例,变量id设置为广告。但我想使用更优雅的await形式,但它不起作用。(当然,后面会有一串await语句。)像这样:
async load() {
try {
console.log('getting parameters');
const params = await this.route.params.toPromise();
console.log('got params', params);
const id = +params['id'];
... etc
Run Code Online (Sandbox Code Playgroud)
我得到的是第一个console.log()调用的输出,但第二个从未出现。当然,id变量没有设置,其余的代码永远不会执行。
文档和工作代码说this.route.params是一个Observable,它应该可以通过toPromise()转换为Promise,从而与 Typescript async / await 一起使用。我对来自HttpClient模块的Observable使用await语句就好了。
但它不起作用。有谁知道为什么?
Lyn*_*242 11
基本答案是:您在这里遇到了无法控制的竞争条件
当您访问 Observableroute.params时,它尚未完成是很正常的。toPromise()在这个时间点调用它会导致一个持久未决的 Promise,这就是你面临的问题。
如果您不绑定使用此 async await 构造,请保留它并更好地params.id通过 ActivatedRouteSnapshot直接同步访问。
ngOnInit() {
const id: string = route.snapshot.params.id;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |