アプリユーザーを認証してログインするために、いくつかの手順を実行するAngular 2サービスがあります。 Observerでnext()を呼び出そうとするたびに、私は定義されていないというエラーが出ます。 Observableがインスタンス化されたときに、私がnext()を呼び出すことができる唯一の場所はコンストラクタの内側です。RxJS Observable&Observerの問題
authenticateUser()を呼び出すと、this.isLoggedInが定義されていないというエラーが表示されます。
AuthService.ts
public isLoggedIn$: Observable<boolean>;
private isLoggedIn: Observer<boolean>;
constructor(...) {
this.isLoggedIn$ = new Observable<boolean>(
(observer: Observer<boolean>) => {
this.isLoggedIn = observer;
// this works fine
this.doLogin();
}).share()
}
private doLogin =():void => {
let context:AuthContextModel = this.authContextService.getAuthContext();
if (context) {
let isAuthenticated = this.isAuthenticated(context);
if (isAuthenticated) {
this.doCreateCurrentUserContext(context)
.then((result) => {return this.doNotifyLoggedInStatus(result);});
}
}
};
private doNotifyLoggedInStatus = (result:boolean):Promise<boolean> => {
this.isLoggedIn.next(result);
return new Promise((resolve, reject) => {
return resolve(true);
});
};
public authenticateUser = (user: string, pass: string):Promise<boolean> => {
return this.doFetchToken(user, pass)
.then((fetchTokenData) => {return this.doStoreToken(fetchTokenData);})
.then((authContext) => {return this.doCreateCurrentUserContext(authContext);})
.then((result) => {return this.doNotifyLoggedInStatus(result);});
};
私は 'isLoggedIn $は'加入していなかったためだと思います。 – estus
@estusありがとうございました!私は数時間、頭を叩いています。ありがとう! – JBeckton