当对象不是instanciate时发送observable

时间:2017-08-25 07:44:00

标签: angular typescript observable

我有一个逻辑问题,当感觉可行时我无法通过observable解决。它是(我期望)工厂模式的一部分?

问题是: - 我有一个带参数'p'的Class'Cl'。 - 在'Cl'构造函数中,我发出一个http请求来获取p的正确值(是的,这部分感觉也很奇怪) -'Cl'有一个吸气剂,它返回'p'或其中的一部分。

当我做instance = new CL(); instance.get();当然我的http请求尚未完成。所以'p'是未定义的。 只有当p得到定义时,getter才能返回一个可以接受的observable吗?

也许有些代码会更好地解释这种情况:

import {lot of thigs } from '@angular/core'; //and RxJs

@Component({
//...
})
export class aClass {
private p:any

constructor() {
    this.p = return this.Http.get('a/route')//let's say this request take AGE
    .map((response) => { 
        return response.json(); 
    });
}

//Obviously no working cause cause p isn't "define yet"
public getP(index){
    return this.p[index];
}

//I'd hope something like this would work but it doesn't.
public getObservableP(index): Observable<any>{
    return Observable.of(this.p[index]);
}

}

你能否告诉我如何返回一个Observable(或者如果它应该是一个Promise),当p是instanciate时,它将满足。感谢。

(我已经阅读了几个关于constuctor中的http请求的内容很糟糕,也许我的构思错了。)

1 个答案:

答案 0 :(得分:1)

如果发布的代码充当服务,最好的方法是使用这样的异步管道:

import {lot of thigs } from '@angular/core'; //and RxJs

@Component({
//...
})
export class aClass {
private p:any

constructor() {
    this.p = return this.Http.get('a/route')//let's say this request take AGE
    .map((response) => { 
        return response.json(); 
    });
}

public getP(index){
    return this.p;
}
}

在组件中,您将注入aClass并在模板中:

<div *ngFor="let something of aClass.getP() | async">
    {{something}}
</div>

<p>{{aClass.getP() | async}}</p>