Вызов асинхронной функции в utils.js файл (React-Родной)?

#react-native #async-await #geolocation

Вопрос:

Я создаю приложение погоды в react-native для своего портфолио.

Я хотел бы иметь возможность вызывать вспомогательную функцию в своем utils.js файл. Эта функция является функцией асинхронной стрелки и отвечает за получение координат широты и долготы.

Функция возвращает координаты в массиве, и я использую разрушение, чтобы установить состояние в компоненте.

Тем не менее, я получаю предупреждение в своей консоли, в котором говорится следующее:

ПРЕДУПРЕДИТЕ о возможном отклонении необработанного обещания (идентификатор: 1): Ошибка типа: неопределенный не является объектом (оценка ‘_$$_REQUIRE(_dependencyMap[11], «../Utils/utils»).Глобальные функции.getLocation’)

Что я могу сделать не так? Любая помощь будет оказана.

Utils.js

 import {PermissionsAndroid} from 'react-native';
import Geolocation from 'react-native-geolocation-service';

const globalFunctions = {
  getLocation: async () => {
const coordinates = [];
const hasLocationPermission = await 
PermissionsAndroid.request(
  PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
);

if (hasLocationPermission == PermissionsAndroid.RESULTS.GRANTED) {
  Geolocation.getCurrentPosition(
    position => {
      console.log('Geolocation Granted');
      console.log(position);
      const latitude = position.coords.latitude;
      const longitude = position.coords.longitude;
      coordinates.push(latitude);
      coordinates.push(longitude);
      return coordinates;
    },
    error => {
      console.log(error.code, error.message);
    },
    {enableHighAccuracy: true, timeout: 15000, maximumAge: 10000},
  );
} else {
  console.log('User denied Geolocation');
}
 

},
};

WeatherContainer.js

 import React, {Component} from 'react';
import {Text, Image, StyleSheet, View, StatusBar} from 'react-native';
import {globalFunctions} from '../Utils/utils';

class WeatherContainer extends Component {
  constructor() {
    super();
    this.state = {
      lat: null,
      lon: null,
    };
  }

  componentDidMount = () => {
    this.getLocationData();
  };

  getLocationData = async () => {
    const [latitude, longitude] = await globalFunctions.getLocation();
    this.setState({
      lat: latitude,
      lon: longitude,
    });
  };

  render() {
    return (
      <View style={styles.container}>
        <View style={styles.innerContainer}>
          <Text style={styles.location}>{this.state.lat}</Text>
          <Text>{this.state.lon}</Text>
        </View>
      </View>
    );
  }
}
 

Комментарии:

1. Похоже, вы ничего не экспортируете из Utils.js

Ответ №1:

Вам необходимо экспортировать функцию globalFunctions из Utils.js

 const export globalFunctions