Angular 2从带有promise和等待的url获取值

时间:2017-05-28 10:44:13

标签: angular typescript

所以我试图从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();  
    }

1 个答案:

答案 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; } 可见。