在调用方法中,我需要从此方法的返回值中提取类别数组(Category [])。我该怎么做呢。我不能快速兑现承诺。
getCategories() : Promise<Category[]> {
return this.http.get(this.categoriesUrl).toPromise()
.then(response => response.json().data as Category[])
.catch(this.handleError);
}
如何从上述getCategories()方法的结果中提取特定类别?这不起作用。
getCategory(id: string): Category {
return this.getCategories()
.filter((category: Category, index: number, array: Category[]) => {
return category.id === id;
});
}
答案 0 :(得分:0)
对返回的承诺
使用then
getCategories().then((categories: Category[]) => {
console.log(categories)
});
答案 1 :(得分:0)
getCategories()实际上没有像你期望的那样返回数据,它实际上会返回一个承诺!
您需要致电&#39; .then&#39;在调用此函数的代码中。
以下是您最简单的形式。
> fr type is <class 'float'>
> Traceback (most recent call last):
> File "createRFRegion.py", line 260, in <module>
> write_rf_region(rf_region_file, rf_region_filename)
> File "createRFRegion.py", line 233, in write_rf_region
> rf_region_file.write(create_rx_channel(channel, i))
> File "createRFRegion.py", line 164, in create_rx_channel
> <Frequency>" + str(fr) + "</Frequency>\n\
> TypeError: must be str, not int
Promise是链接的,所以你总是需要在链的末尾打电话。
答案 2 :(得分:-1)
您不应该使用承诺,而应该学习拥抱RxJS
Observables。然后,您可以在调用函数内部订阅Observable的结果,并保存对组件内部数据的引用(或任何类调用服务函数)。
// my-service.ts
getCategories(): Observable<Category[]> {
return this.http.get(this.categoriesUrl)
.map(response => response.json().data as Category[]);
}
getCategory(id: string): Category {
return this.getCategories()
.selectMany(Observable.fromArray)
.filter((category: Category, index: number) => {
return category.id === id;
})
.first();
}
// my-component.ts
this.service.getCategories().subscribe((categories: Category[]) => {
this.localCategories = categories;
})
map
函数将修改从Observable接收的数据。注意:http
请求在订阅之前不会触发。