我有一个函数,该函数应根据发出http发布请求的函数的返回值返回布尔值:
checkPost(callRequest: boolean): boolean {
console.log('START REQUEST');
if(callRequest){
this.makeRequest().subscribe(result => {
console.log(`RESULT ${result}`);
return result;
}
console.log('THIS SHOULD NEVER SHOW');
}else{
...
}
console.log('THIS SHOULD ALSO NEVER SHOW');
}
makeRequest
非常简单:
makeRequest(): Observable<boolean> {
...other stuff...
return this.http.post<UserData>(oauth2_token_endpoint, body, {headers})
.pipe(map(user => {
if (user && user.access_token) {
this._saveToken(user);
this.currentUserSubject.next(user);
return true;
}
return false;
}));
}
该帖子可能需要1-5秒,这很好,但是我想确保checkPost()
返回makeRequest()
的结果(等待它)。永远不可能超越if / else
,这是正确的方法吗?
我尝试过:
this.makeRequest().pipe(map(result => {
console.log(`RESULT: ${result}`);
return result;
}));
但这毕竟不会触发请求。
角度8.2.14
答案 0 :(得分:1)
通常,拥有一个在调用请求后返回true或false的函数是一个非常糟糕的主意。您可以使用一个函数,该函数返回可观察的布尔值(或任何可观察的布尔值),然后您订阅。
checkPost(callRequest: boolean): Observable<any> {
if (callRequest) //if callRequest, return the response of this.makeRequest
return this.makeRequest();
return of(null); //else return "null" -case 1-
}
您通常会订阅checkPost
this.myservice.checkPost(true).subscribe(res=>{
if (res==null)
....fall in case 1..
if (res==true)
....
if (res==false)
...console.res
})
答案 1 :(得分:-1)
也许您可以尝试类似的方法(不确定是否可以正常工作,但是您知道了)
ksetup /AddHostToRealmMap <host name of CAS> <realm>