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

avatar
Tom0594
9 августа 2021 в 01:41
61
1
0

Я создаю погодное приложение в React Native для своего портфолио.

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

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

Однако я получаю предупреждение в консоли следующего содержания:

WARN Возможное отклонение необработанного обещания (id: 1): TypeError: undefined не является объектом (оценка '_$$_REQUIRE(_dependencyMap[11], "../Utils/utils").globalFunctions.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>
    );
  }
}
Источник
Artal
9 августа 2021 в 13:33
0

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

Ответы (1)

avatar
Tamoor Ashiq
10 августа 2021 в 20:27
0

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

const export globalFunctions