Я добавляю геолокацию в свое приложение, и мне нужно запустить наблюдаемый Geolocation.watchPostion()
некоторое время, прежде чем пользователь действительно запросит местоположение.Как изменить подписку на Наблюдение в ответ на действие пользователя?
у меня была идея создать переменные экземпляра
private locationObserver = (stub observer);
private locationSubscription;
и сделать
this.locationSubscription = Geolocation.watchPosition().subscribe(
next => this.locationObserver.next(next),
err => this.locationObserver.error(error),
comp => this.locationObserver.complete(complete)
)
А потом в какой-то позже вызвать следующее.
onRequestLocation(){
this.locationObserver = Observer.create(
location => {
this.doMyStuff(location);
this.locationSubscription.unsubscribe();
}
)
}
Однако, это не похоже на правильный способ сделать это. Это плохо?
Моя цель - начать Geolocation.watchPosition()
, а затем, в ответ на пользовательское событие, начните что-то делать. Я также хотел бы, чтобы событие тайм-аута произошло 5 секунд после пользовательского события.
Вот еще одна возможность, которая до сих пор не чувствует себя хорошо:
Я делаю переменные экземпляра
private userEventHasOccured
private locationSubscription
и сделать
this.locationSubscription = Geolocation.watchPosition().subscribe(
next => {
if (userEventHasOccured) {
this.doMyStuff(next);
this.unsubscribeLocation();
}
}
)
public unsubscribeLocation() {
this.locationSubscription.unsubscribe();
}
и
onUserEvent(){
this.userEventHasOccured = true;
}
Кроме того, это e менее раздражающий способ иметь сам абонемент?
Просьба либо разработать рабочий раствор (код). Этот текущий ответ на самом деле не дает достаточной информации. Благодаря! :) – Alex
Конечно. Мое решение в конечном итоге заключалось в создании _two_ подписки на одно и то же наблюдаемое - одно, чтобы «запустить» его, а другое - в ответ на ввод пользователя, а затем отменить их обоих, чтобы «остановить» наблюдаемое. –
Выглядит лучше! Вы получаете +1 за это;) – Alex