Как вернуть объект ответа геолокации для использования в разных компонентах? - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь создать общую функцию, которая возвращает геолокацию и может быть доступна другим компонентам в JavaScript. Я создал функцию, но она не возвращает никаких данных, когда я вызываю метод из другого компонента.

// In CommonMethod.js

export const getLocationData = async () => {
  navigator.geolocation.getCurrentPosition(
    success => {
      console.log("SUCCESS", success);
      return success;
    },
    error => {
      console.log("ERROR", error);
      return error;
    }
  );
};

//In Location.js
import React, { Component } from "react";
import { getLocationData } from "./CommonMethod";

export default class Location extends Component {
  constructor(props) {
    super(props);

    this.state = {
      location: []
    };
  }

  async componentDidMount() {
    var locationData;
    console.log("CALLING GEOLOCATION START");
    locationData = await getLocationData();
    console.log("CALLING GEOLOCATION START", locationData);
    if (locationData) {
      this.setState({
        location:
          locationData.coords.latitude + "," + locationData.coords.longitude
      });
    } else {
      this.setState({
        location: "User denied Geolocation"
      });
    }
    console.log("CALLING GEOLOCATION AFTER 5 SEC", locationData);
  }

  render() {
    return (
      <div>
        <h1> {this.state.location}</h1>
      </div>
    );
  }
}

1 Ответ

0 голосов
/ 31 октября 2019

Вам нужно вернуть обещание в вашей функции, чтобы получить результат в вашей locationData переменной

// In CommonMethod.js

export const getLocationData = async () => {
  return navigator.geolocation.getCurrentPosition(
    success => {
      console.log("SUCCESS", success);
      return success;
    },
    error => {
      console.log("ERROR", error);
      return error;
    }
  );
};

`

...