gpt4 book ai didi

typescript - 为什么观察者未定义

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:44 26 4
gpt4 key购买 nike

在构造函数中,我创建了 Observable 和 Observer。然后尝试在 apiConnect() 中发送 next() 方法以异常结束。

该服务将被引导以在我的整个应用程序中可用。

    private _apiServerConnected: boolean = false;
public _apiServerConnectedObserver: Observer<boolean>;
public apiServerConnectedObservable: Observable<boolean>;

private _serverIdx = 0;
private _apiServers: Array<string> = ['localhost:81', '192.168.2.210:81', '172.17.32.164:81'];
private _server: string;

constructor(
private _http: Http,
private _apiCalls: ApiCalls
) {
this._server = this._apiServers[0];

// attach and create observer and observable for apiserverconnected
this.apiServerConnectedObservable = new Observable(observer => this._apiServerConnectedObserver = observer)
.startWith(this._apiServerConnected)
.share();

this.apiConnect();
}

apiConnect() {
this._http.get('http://' + this._server + this._apiCalls.SysConnect())
.map((res) => res.json())
.subscribe((data) => {
this._apiServerConnected = data;

if (this._apiServerConnected) {
this.apiServer = 'http://' + this._server;
console.log('Server connected: ' + this._server);
this._apiServerConnectedObserver.next(this._apiServerConnected);
} else {
this.apiConnectError();
}
}, (error) => {
this.apiConnectError();
}, () => {
});
}

apiConnectError() {
this._serverIdx++;
if (this._serverIdx > this._apiServers.length) {
this._serverIdx = 0;
}
this._server = this._apiServers[this._serverIdx];
console.log('Server connection failed trying next: ' + this._server);
this.apiConnect();
}

EXCEPTION: TypeError: _this._apiServerConnectedObserver is undefined

有什么想法吗?

最佳答案

您需要订阅 apiServerConnectedObservable observable 来初始化它。否则,初始化回调永远不会被调用,观察者也永远不会被初始化。

this.apiServerConnectedObservable
= new Observable(observer => this._apiServerConnectedObserver = observer)
.startWith(this._apiServerConnected)
.share();

this.apiServerConnectedObservable.subscribe(() => {
(...)
});

关于typescript - 为什么观察者未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com