Javascript 如何从承诺背景中进行反应性思考(2)

Javascript 如何从承诺背景中进行反应性思考(2),javascript,angular,typescript,reactivex,Javascript,Angular,Typescript,Reactivex,一个人如何“反应性地”思考和构建来自承诺背景的代码 我正在努力与一个非常简单的设置。我有一个方法.authenticate,它应该返回一个可观察的值,该值会产生一个布尔值(这已经让我担心我在想Promish了) 我是如何习惯于做事的: authenticate() { if(this.userProfile) { return Promise.resolve(true); } if(!this.jwt) { retu

一个人如何“反应性地”思考和构建来自承诺背景的代码

我正在努力与一个非常简单的设置。我有一个方法
.authenticate
,它应该返回一个可观察的值,该值会产生一个布尔值(这已经让我担心我在想Promish了)

我是如何习惯于做事的:

authenticate() {    
    if(this.userProfile) {  
        return Promise.resolve(true);  
    }  
    if(!this.jwt) {  
        return Promise.resolve(false); // depending on implementation, either reject or resolve with false  
    }  
    return http.post('/exchangetoken')  
        .then(response => {  
            this.user = response.data.profile;  
            this.jwt = response.data.jwt;
            return true;  
        })  
        .catch(error => {
            if(error.status === 400) {
                return Promise.resolve(false)
            }
            return Promise.reject(error);
        });  
}  
现在在Angular2/TypeScript/ReactiveX中,我想做同样的“反应性” 如果
true
跳过其余部分并“解析”
true
检查
this.jwt
=>如果
false
跳过其余部分并“解析”
false
调用一些端点=>如果
success
保存状态并“解析”
true
,如果
false
则“解析”
false

到目前为止,我的尝试很糟糕,我知道我是操作人员,但我觉得我真正的错误在于构建流程/流程,就好像我在构建承诺链一样:

authenticate(nextUrl: string): Observable<boolean> {
    this.redirectUrl = nextUrl;

    if(!!this.userProfile) { return Observable.of(true); }

    if(!this.jwt) { return Observable.of(false); }

    return this.exchangeToken();
  }

exchangeToken(): Observable<boolean> {
    return this.oeApi
      .post('v1/auth/exchangetoken')
      .map(response => this.extractProfile(response))
      .catch(error => {
        console.log(error)
        return Observable.of(false)
      });
  }
authenticate(nextUrl:string):可观察{
this.redirectUrl=nextUrl;
if(!!this.userProfile){return Observable.of(true);}
如果(!this.jwt){return Observable.of(false);}
返回这个.exchangeToken();
}
exchangeToken():可观察{
返回这个.oeApi
.post('v1/auth/exchangetoken')
.map(response=>this.extractProfile(response))
.catch(错误=>{
console.log(错误)
可观察到的返回(错误)
});
}

您的代码看起来不错。它不起作用?