Я постараюсь объяснить вам, что происходит.
- Ваша функция getToken ничего не возвращает. Таким образом, вы получаете неопределенный при распечатке.
- Когда вы подписываетесь на наблюдаемое, у вас есть 3 возможных аргумента:
- следующий: он выполняется каждый раз, когда вы получаете «галочку» в вашей наблюдаемой.
- ошибка: выполняется при получении ошибки.
- complete: выполняется после завершения наблюдения.
В любом из этих случаев вы передаете обратный вызов, который должен быть выполнен, когда происходит каждое из этих событий. Поскольку вы возвращаете внутри этих обратных вызовов, вы не возвращаете метод getToken, а функцию, которая вызывается внутри метода подписки. Представьте себе возможную реализацию метода подписки:
subscribe(nextCB, errorCB, completeCB){
...
if(completed) {
completeCB();
}
}
Как видите, значение, которое вы возвращаете для полного обратного вызова, не присваивается и не возвращается.
У вас есть несколько решений / альтернатив для вашего случая. Вы можете вернуть саму наблюдаемую информацию (this.meService.getMe ()) с некоторыми картами, а затем подписать ее где угодно, или просто запустить свой код внутри полного обратного вызова.
Но IMO лучше потратить некоторое время на поиск общих понятий javascript и асинхронных концепций.