我想在第一个函数的IF条件下使用返回的布尔标志,如下所示,但是,在通过服务分配实际值之前,返回了第二个函数。非常感谢您的帮助。
subModuleLoggedInCheck(component: string): boolean {
console.log(this.retrieveSubModuleLoggedInInfo(component)); // always return false which is invalid
if (!this.retrieveSubModuleLoggedInInfo(component)) {
return this.createUpdateLoggedInRecord(component, 1);
} else {
this.openGenericDialog('GenericAlert', "Some text...");
this.dialogRef.afterClosed()
.subscribe(result => {
});
return false;
}
}
retrieveSubModuleLoggedInInfo(component: string): boolean {
var flag = false;
this.activeUserService.getSubModuleLoggedInInfo('Retrieve', 'AccountsPayable', component)
.subscribe((data) => {
if(data) {
flag= true;
// console.log(flag);
} else {
flag= false;
}
});
return flag;
}
因此,您需要在flag
块内设置返回subscribe()
的值。这是因为它是async
类型,即使subscribe()
块仍在执行中,下面的代码也将被执行。
所以您需要将第二个功能retrieveSubModuleLoggedInInfo()
更新为:
retrieveSubModuleLoggedInInfo(component: string): boolean {
var flag = false;
this.activeUserService.getSubModuleLoggedInInfo('Retrieve', 'AccountsPayable', component)
.subscribe((data) => {
if(data) {
flag = true;
return flag;
} else {
flag = false;
return flag;
}
});
}
OR
您还可以缩短subscribe()
块代码,并跳过flag
变量创建为:
retrieveSubModuleLoggedInInfo(component: string): boolean {
this.activeUserService.getSubModuleLoggedInInfo('Retrieve', 'AccountsPayable', component)
.subscribe((data) => {
return !!data;
});
}
Kundaty,通常,如果在一个函数中有一个可观察的对象,并且想要返回一个值,则更好的方法是返回一个可观察的对象,因此您无需调用该函数,否则就订阅它。为此,您使用“ switchMap”,它使我们可以使用响应和“ of”来返回任何变量的可观察值。想象一下您的功能,例如
import {of,Observable} from 'rxjs'
import {switchMap} from 'rxjs/operators'
retrieveSubModuleLoggedInInfo(component: string): Observable<boolean>
{
return this.activeUserService.getSubModuleLoggedInInfo('Retrieve', 'AccountsPayable', component)
.pipe(switchMap(data=>{
//here you has the value of "data"
if(data) {
flag= true;
// console.log(flag);
} else {
flag= false;
}
//you need return an observable, use the 'rxjs' of
return of(flag)
}))
}
请参见您的函数未返回布尔值,否则未返回Observable。看看如何,我们不订阅该函数,否则使用switchMap更改响应,不返回数据else((flag)
然后您“调用”该函数订阅
this.retrieveSubModuleLoggedInInfo("hello").subscribe(res=>{
//res will be true or false
})
我知道这很复杂,但是,如果您习惯使用Observables,那就早点爱上它吧