PositionError {code: 3, message: "Timeout expired"}

Geolocation is giving such error.

getUserPosition() {
        return new Promise(resolve => {
            const HIGH_ACCURACY = 'high_accuracy';
            if (this.platform.is('cordova')) {
                console.log('Platform is cordova');
                this.platform.ready().then(() => {
                    console.log('Platform is ready');
                    this.diagnostic.isLocationEnabled().then(enabled => {
                        console.log('Location is enabled: ' +enabled);
                        if (enabled) {
                            if (this.platform.is('android')) {
                                console.log('Platform is android');
                                this.diagnostic.getLocationMode().then(locationMode => {
                                    console.log('Location Mode : ' + locationMode);
                                    if (locationMode === HIGH_ACCURACY) {
                                        this.geo.getCurrentPosition({
                                            timeout: 30000,
                                            maximumAge: 0, //was 0
                                            enableHighAccuracy: false //was true
                                        }).then(pos => {
                                            resolve({
                                                coords: {
                                                    latitude: pos.coords.latitude,
                                                    longitude: pos.coords.longitude
                                                }
                                            });
                                        }).catch(error => resolve(error));
                                    } else {
                                        this.askForHighAccuracy().then(available => {
                                            console.log('High Accuracy is available : ' + available);
                                            if (available) {
                                                this.getUserPosition().then(a => resolve(a), e => resolve(e));
                                            }
                                        }, error => resolve(error));
                                    }
                                });
                            } else {
                                this.geo.getCurrentPosition({
                                    timeout: 30000,
                                    maximumAge: 0,
                                    enableHighAccuracy: true
                                }).then(pos => {
                                    resolve({
                                        coords: {
                                            latitude: pos.coords.latitude,
                                            longitude: pos.coords.longitude
                                        }
                                    });
                                }).catch(error => resolve(error));
                            }
                        } else {
                            this.locationAccuracy.request(1).then(result => {
                                console.log('Location accuracy : ' + result);
                                if (result) {
                                    this.getUserPosition().then(result => resolve(result), error => resolve(error));
                                }
                            }, error => {
                                resolve(error)
                            });
                        }
                    }, error => {
                        resolve(error)
                    });
                });
                //user on browser
            } else {
                //resolve('Cordova is not available');
                resolve(this.geo.getCurrentPosition());
            }
        });
    }

    askForHighAccuracy(): Promise<Geoposition> {
        return new Promise(resolve => {
            this.locationAccuracy
                .request(this.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY).then(() => {
                this.geo.getCurrentPosition({timeout: 30000}).then(
                    position => {
                        resolve(position);
                    }, error => resolve(error)
                );
            }, error => resolve(error));
        });
    }

failing with timeout :

    this.geo.getCurrentPosition({
                                            timeout: 30000,
                                            maximumAge: 0, //was 0
                                            enableHighAccuracy: false //was true
                                        }).then(pos => {
                                            resolve({
                                                coords: {
                                                    latitude: pos.coords.latitude,
                                                    longitude: pos.coords.longitude
                                                }
                                            });
                                        }).catch(error => resolve(error));

Issue on android devices , any help ?