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(错误)
可观察到的返回(错误)
});
}
您的代码看起来不错。它不起作用?