Angular2 - 将'activatedRoute.params'变为承诺

geo*_*gej 3 javascript promise observable angular-promise angular

我正在试图将可观察的变速器ActivatedRoute转换为承诺,但没有任何运气.我已http成功将请求转换为承诺:

this.riaService.getAdvisorsForState(this.activeState)
    .then(rias => {
        this.riasForState = rias.json();
        console.log(this.riasForState);
    });
// this all works ^
Run Code Online (Sandbox Code Playgroud)

但是我无法将'activatedRoute.params'变成一个承诺:

export class InvestmentAdvisorStateComponent implements OnInit {

    constructor(private activatedRoute: ActivatedRoute, private riaService: InvestmentAdvisorService) { }

    getStateFromUrl() {
        this.activatedRoute.params
            .toPromise()
            .then(params => {
                console.log('HERE',params)
            });
    }
// this does not work for me ^
Run Code Online (Sandbox Code Playgroud)

这就是我现在所拥有的:

getStateFromUrl() {
    this.activatedRoute.params
        .subscribe((param: any) => {
            this.activeState = param['state'];
        });
}
// works ^
Run Code Online (Sandbox Code Playgroud)

我希望将此作为一种承诺来实现,所以我可以.then脱离它.任何有关如何做到这一点的帮助非常感谢.

Gün*_*uer 7

observable和promise之间的主要区别在于,observable可以发出多个事件,而promise只发出一个事件.

为了使您的示例有效,我假设您只对第一个事件感兴趣.

getStateFromUrl() {
    this.activatedRoute.params
        .first()
        .toPromise()
        .then(params => {
            console.log('HERE',params)
        });
}
Run Code Online (Sandbox Code Playgroud)

这样,创建的承诺toPromise()就完成了第一个params事件.

  • 很棒的答案。我补充说,要获得更多类似同步的代码,可以使用`public async ngOnInit(){let params = await this.activatedRoute.params.first()。toPromise(); console.log('pppp',params); }` (2认同)
  • 2021 年第一个不再起作用 (2认同)