44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Observable } from 'rxjs';
 | |
| 
 | |
| // #docregion
 | |
| 
 | |
| // Create an Observable that will start listening to geolocation updates
 | |
| // when a consumer subscribes.
 | |
| const locations = new Observable((observer) => {
 | |
|   let watchId: number;
 | |
| 
 | |
|   // Simple geolocation API check provides values to publish
 | |
|   if ('geolocation' in navigator) {
 | |
|     watchId = navigator.geolocation.watchPosition((position: Position) => {
 | |
|       observer.next(position);
 | |
|     }, (error: PositionError) => {
 | |
|       observer.error(error);
 | |
|     });
 | |
|   } else {
 | |
|     observer.error('Geolocation not available');
 | |
|   }
 | |
| 
 | |
|   // When the consumer unsubscribes, clean up data ready for next subscription.
 | |
|   return {
 | |
|     unsubscribe() {
 | |
|       navigator.geolocation.clearWatch(watchId);
 | |
|     }
 | |
|   };
 | |
| });
 | |
| 
 | |
| // Call subscribe() to start listening for updates.
 | |
| const locationsSubscription = locations.subscribe({
 | |
|   next(position) {
 | |
|     console.log('Current Position: ', position);
 | |
|   },
 | |
|   error(msg) {
 | |
|     console.log('Error Getting Location: ', msg);
 | |
|   }
 | |
| });
 | |
| 
 | |
| // Stop listening for location after 10 seconds
 | |
| setTimeout(() => {
 | |
|   locationsSubscription.unsubscribe();
 | |
| }, 10000);
 | |
| // #enddocregion
 |