"rxjs": "^6.5.3"
У меня есть rxInit()
данные AsyncStorage.
Я хочу использовать данные, которые я получаю, чтобы на экране отображался логин или домашний экран.
Вот моя основная функция:
AppService.shared.rxInit().pipe(map((value) => {
console.log('value is ->', value); // I get a random string here like 'a0a2a33d-eb05-49b9-ad6e-3c199a7d5e11'
return UserService.shared.rxInit().subscribe();
})).subscribe(() => {
// I want the return function UserService.shared.rxInit().subscribe() finish get the data then subscribe my next function isLogin()
if (UserService.shared.isLogin()) {
console.log('has Login');
navigation.navigate('MainStack'); // to Home
} else {
console.log('need Login');
navigation.navigate('Login'); // to Login
}
});
StorageService.shared. get () является наблюдаемой:
get(key) {
return (
from(storage.load({key: key}))
.pipe(catchError(error => of(null)))
.pipe(map((value) => value))
);
}
о AppService.shared.rxInit ()
rxInit() {
return StorageService.shared.get('deviceuuid'
).pipe(
mergeMap((deviceuuid) => {
if (deviceuuid == null) {
this.deviceuuid = uuid();
return StorageService.shared.set('deviceuuid', this.deviceuuid);
} else {
// code run here , because I have deviceuuid in my case.
this.deviceuuid = deviceuuid;
return of(this.deviceuuid);
}
}),
tap({ next: result => {
console.log('rxInit deviceuuid result', result);
}, error: error => {
console.log('rxInit deviceuuid on error', error.message);
},
complete: () => console.log('rxInit deviceuuid on complete') // it complete.
})
);
о UserService.shared.rxInit (). subscribe ()
rxInit() {
console.log('rxInit start');
return combineLatest(
myObservable1,
myObservable2
).pipe(
mergeMap((result) => {
console.log('My storage rxInit result =>', result);
const [token, email] = result;
this.token = token;
this.email = email;
console.log('rxInit token', token)
console.log('rxInit email', email)
if (this.token != null && this.email != null) {
return this.getUserInfo(pid, provider);
} else if (this.token != null && this.uid != null) {
return this.getUserInfo(pid, provider);
} else {
return of(null);
}
}),
tap({ next: result => {
console.log('rxInit user result', result);
}, error: error => {
console.log('rxInit user on error', error.message);
},
complete: () => console.log('rxInit user on complete')
})
);
}
о UserService.shared.isLogin ()
isLogin() {
console.log('isLogin =>');
console.log('this.enail', this.email);
console.log('this.token', this.token);
if(this.email != null) {
// return true or false depend my logic
}
// return true or false depend my logic
}
Моя проблема My storage rxInit result =>
всегда происходит после isLogin =>
.
Как мне убедиться, что isLogin =>
после My storage rxInit result =>
?
Буду признателен за любую помощь.