订阅服务将返回“未定义”值

时间:2018-08-26 12:02:40

标签: angular typescript rxjs6

我正在尝试订阅一个服务,该服务尝试使用以下对象访问REST后端。

export class Country {

    iso: String;
    iso3: String;
    name: String;
    niceName: String;
    numCode: number;
    phoneCode: number;

    constructor(values: Country = {}) {
        Object.assign(this, values);
    }
}

这是一种服务方法,可从API检索数据,并将数据成功检索到map()函数中。

public getCountries(): Observable<Country[]> {
    return this.http.get(COUNTRY_URL).pipe(
            map(response => {
                const countries = response.json()._embedded.countries;
                return countries.map((country) => { new Country(country) });
            }),
            catchError(this.handleError)
        );
}

这是订阅该服务的消费者。

countries: Country[] = [];

constructor(private countryService: CountryService) {
    countryService.getCountries()
        .subscribe(countries => { 
            this.countries = countries;
    });
}

country变量最终是由undefined个对象组成的数组。

  

其他信息

     

我正在将 Angular 6 RXJS6 结合使用,并进行了迁移   指南   here

这是一个示例API响应。

{
    "_embedded" : {
        "countries" : [ ... ]
    },
    "_links" : {
        "first" : {
            "href" : "http://localhost:8080/api/countries?page=0&size=20"
        },
        "self" : {
            "href" : "http://localhost:8080/api/countries{?page,size,sort}",
            "templated" : true
        },
        "next" : {
            "href" : "http://localhost:8080/api/countries?page=1&size=20"
        },
        "last" : {
            "href" : "http://localhost:8080/api/countries?page=11&size=20"
        },
        "profile" : {
            "href" : "http://localhost:8080/api/profile/countries"
        },
        "search" : {
            "href" : "http://localhost:8080/api/countries/search"
        }
    },
    "page" : {
        "size" : 20,
        "totalElements" : 239,
        "totalPages" : 12,
        "number" : 0
    }
}

有人可以看到我的代码有任何问题吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

好像您在return之前缺少new Country(country)(或者,删除周围的花括号)。