Один из способов сделать это - реализовать обратный вызов, который вы передадите в параметры метода.Примерно так.
getUserDocInfo(callback) {
this.getUserInfo().then(() => {
this.userDoc = this.afs.doc(`users/${this.userID}`);
this.user = this.userDoc.snapshotChanges();
this.user.subscribe(callback);
})
}
getToken(){
this.userService.getUserDocInfo((value) => {
console.log(value.payload.data());
});
}
Вы также можете вернуть Observable
и подписаться на него в контексте своего компонента, и вы можете обрабатывать подписки, как хотите.
import { Observable } from 'rxjs/Observable/';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';
@Injectable()
export class AlertService {
//constructor and properties...
getUserDocInfo(): Observable<any> {
Observable.fromPromise(this.getUserInfo()).mergeMap(() => {
this.userDoc = this.afs.doc(`users/${this.userID}`);
this.user = this.userDoc.snapshotChanges();
return this.user.map(user => user);
});
}
}
@Component(...)
export class MyComponent implements OnDestroy {
subscriptions: Array<Subscription> = new Array;
//constructor
getToken(){
const sub = this.userService.getUserDocInfo().subscribe((value) => {
console.log(value.payload.data());
});
this.subscriptions.push(sub);
}
ngOnDestroy() {
this.subscriptions.forEach(sub => sub.unsubscribe());
}
}