我有一个函数,其中包含可观察到的json数组,作为http get的响应:
public getCountofProducts() {
this.productService.getAllProducts().subscribe
(
(products) => {
if (products!= null) {
this.productsLength = products.length;
}
}
);
return this.productsLength;
}
功能的使用:
public getItems()
{
this.items=[
count: this.getCountofProducts()
]
}
getAllproducts()响应: 返回带有数组的可观察值
现在,该函数返回“ 0”,因为订阅函数未完成,我得到了初始化值,即“ 0”
如果我在订阅功能中执行console.log,则会显示正确的值。
订阅的函数完成后,获取值的方法是什么?
答案 0 :(得分:1)
而不是订阅Observable。您可以通过Observable
将Promise
转换为.toPromise()
。您还需要制作函数async
并将await
放在应用.toPromise()
的函数之前。然后,products数组将存储在名为product的变量中,然后您可以正常使用它。
示例:
public async getCountofProducts() {
const products = await this.productService.getAllProducts().toPromise();
if(products !== null) {
return products.length;
} else {
return 0;
}
}
调用此函数时,必须使用async
在await
函数中调用它,如果不这样调用,它将仅返回ZoneAwarePromise。除此之外,您还可以使用Promise
访问类似.then()
的值。
//You can call it like this
public async someFunction() {
console.log(await this.getCountofProduts);
}
//OR
public someFunction() {
this.getCountofProducts().then((result) => {console.log(result)});
}
答案 1 :(得分:0)
现在我想到了两个选择:第一个选择返回服务器调用并在组件中订阅它,否则返回一个Promise。
第一个选项:
在您的组件中:
public getItems()
{
this.productService.getAllProducts().subscribe((products: Array<any>) => {
this.items=[
count: products ? products.length : 0;
]
});
}
第二个选项:
product.service.ts
getAllProducts(): Promise<any[]> {
return this.http.get('YOUR_URL').toPromise();
}
您的通话将如下所示。
public getCountofProducts() {
return this.productService.getAllProducts().then
(
(products) => {
if (products!= null) {
this.productsLength = products.length;
return this.productsLength;
}
}
);
}
在您的组件中:
public getItems()
{
this.getCountofProducts().then((len:number) => {
this.items=[
count: len
]
});
}
答案 2 :(得分:0)
尝试一下,如果有任何问题,请告诉我
# Stage 2
FROM nginx:1.15.8-alpine
COPY --from=node /usr/src/app/dist /usr/share/nginx/html
RUN rm /etc/nginx/nginx.conf /etc/nginx/mime.types
COPY nginx.conf /etc/nginx/nginx.conf
COPY mime.types /etc/nginx/mime.types