所以我试图从url获取值,我想用promise和async / await来做这个。但是当我在chrome和opera中运行它时,它只是站在那里等待。 任何人都可以指出我正确的方向或我做错了什么?
我的组件实现:实现OnInit
构造函数:
constructor(private route: ActivatedRoute,
private zone : NgZone
)
{
}
导入:
import { Component, OnInit, NgZone } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs/Rx';
方法:
async ngOnInit()
{
var Id : string = await this.getIdFromUrl();
}
getIdFromUrl() : Promise<string>
{
return this.route.params.map(params =>
{
return params['id'];
}).toPromise();
}
答案 0 :(得分:3)
UICollectionViewFlowLayout
应该返回ngOnInit
。使void
表示XY问题,这是deviates from the interface因为异步async
返回一个承诺并导致可能未被捕获的承诺错误。如果存在应该在初始化时解决的promise,则可以将它们设置为解析器。
ngOnInit
是一个可观察的,因为它导航到具有不同参数的相同路径时会发出多个值。它没有完成,在它上面调用route.params
将导致未决的承诺。由于这个原因,可观察量与承诺无法互换。
初始参数值在组件初始化时已知并且是同步的。它可以通过ActivatedRouteSnapshot
interface,
toPromise()
根据路由的使用方式和route reuse strategy,这可能无法正常工作,因为后续的参数更改将无法处理。由于这个原因,通常最好坚持ngOnInit() {
const id: string = route.snapshot.params.id;
}
可见。