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 мы меняем ответ, мы не возвращаем данные еще (flag)
Затем вы «вызываете» функцию, подписывающуюся
this.retrieveSubModuleLoggedInInfo("hello").subscribe(res=>{
//res will be true or false
})
Я знаю, что это сложно, но, если вы привыкнете использовать Observables, рано его полюбите
Обновите хорошо, наша функция retrieveSubModuleLoggedInInfo возвращает Observable, поэтому мы меняем нашу функцию
retrieveSubModuleLoggedInCheck(component: string): boolean {
this.retrieveSubModuleLoggedInInfo(component).subscribe(res=>{
if (!res)
return this.createUpdateLoggedInRecord(component, 1);
this.openGenericDialog('GenericAlert', "Some text...");
this.dialogRef.afterClosed()
.subscribe(result => {
});
})
}
Ну, что произойдет, если мы сможем вызвать функцию, которая возвращает наблюдаемую в цикле. Ну, форк-джоин приходит на помощь, представьте, что у вас есть массив строк
//we create an array of observables
//we can use the map javascript method
const obs:Observables<any>[]=myArray.map(x=>this.retrieveSubModuleLoggedInInfo(x)) forkjoin(obs).subscribe((res:any[])=>{
//in res[0] we has the response of the first observables
//in res[1] we has the response of the second observable
...
})