Причина этого в том, что изначально getLat
и getLong
оба равны нулю, что дает undefined
, потому что вы не присвоили им никакого значения.
Почему это работает внутри подписки?
Это потому, что когда возвращается ответ на запрос HTTP. Обе переменные присваивают значения, используя
this.getLat = data["lat"];
this.getLong = data["long"];
Почему это не работает вне подписки?
Это связано с тем, что код внутри subscribe
является асинхронным, т. Е. Он будет выполняться вне обычного выполнения программы и будет работать только тогда, когда ваш HTTP-запрос вернет ответ. Поскольку выполнение HTTP-запроса занимает некоторое время, а ваш console.log
выполняется первым, результат будет undefined
Что вы можете сделать?
Если вы хотите выполнить фрагмент кода, который требует значений getLat
и getLong
, вы можете вызвать эту функцию внутри метода subscribe
или если вам нужны эти значения вне вашего компонента,
Вы можете создать Subject
, затем в своем subscribe
вы отправите данные на этот Subject
, а затем в своем коде вы можете subscribe
на него