Size: a a a

React Native — русскоговорящее сообщество

2020 January 21

T

Timur in React Native — русскоговорящее сообщество
как буд-то все то, что внутри .then он вообще игнорит
источник

V

Vishnya in React Native — русскоговорящее сообщество
Timur
сделал вот так, выдает null

const getUserCoordinates = () => {
 let res = null;

 RNLocation.configure({
  distanceFilter: 5.0
 });
 RNLocation.requestPermission({
  ios: 'whenInUse',
  android: {
   detail: 'fine'
  }
 })
  .then(granted => {
   if (granted) {
    RNLocation.subscribeToLocationUpdates(locations => {
     res = {
      lat: locations[0].latitude,
      lon: locations[0].longitude,
     };
     setUserCoordinates(res);
    });
   } else {
    setOrderType('rating');
   }
  })
  .catch(() => {
   setOrderType('rating');
  });

 return res;
};
return напиши перед NLocation.requestPermission
источник

T

Timur in React Native — русскоговорящее сообщество
Возвращает
источник

VP

Vitaliy Ponomarev in React Native — русскоговорящее сообщество
Timur
как буд-то все то, что внутри .then он вообще игнорит
1) читать про промисы
https://learn.javascript.ru/promise-basics#potrebiteli-then-catch-finally

2)
return RNLocation.requestPermission
...
return RNLocation.subscribeToLocationUpdates


потом про async/await и try/catch можно глянуть еще раз.
источник

BS

Bogdan Shelomanov in React Native — русскоговорящее сообщество
подскажите, как называется механика, когда скрин пальцем вниз тянешь и обновляется страница?
источник

AE

Artur Eshenbrener in React Native — русскоговорящее сообщество
Bogdan Shelomanov
подскажите, как называется механика, когда скрин пальцем вниз тянешь и обновляется страница?
pull to refresh
источник

BS

Bogdan Shelomanov in React Native — русскоговорящее сообщество
Artur Eshenbrener
pull to refresh
это либы есть нативные или же сам делаешь?
источник

AE

Artur Eshenbrener in React Native — русскоговорящее сообщество
Bogdan Shelomanov
это либы есть нативные или же сам делаешь?
Стандартный ScrollView поддерживает
источник

AE

Artur Eshenbrener in React Native — русскоговорящее сообщество
Называется RefreshControl у него
источник

BS

Bogdan Shelomanov in React Native — русскоговорящее сообщество
Artur Eshenbrener
Стандартный ScrollView поддерживает
спасибо
источник

T

Timur in React Native — русскоговорящее сообщество
Vitaliy Ponomarev
1) читать про промисы
https://learn.javascript.ru/promise-basics#potrebiteli-then-catch-finally

2)
return RNLocation.requestPermission
...
return RNLocation.subscribeToLocationUpdates


потом про async/await и try/catch можно глянуть еще раз.
Спасибо, помогло)
источник

BS

Bogdan Shelomanov in React Native — русскоговорящее сообщество
Vitaliy Ponomarev
1) читать про промисы
https://learn.javascript.ru/promise-basics#potrebiteli-then-catch-finally

2)
return RNLocation.requestPermission
...
return RNLocation.subscribeToLocationUpdates


потом про async/await и try/catch можно глянуть еще раз.
а что у него не так? типо вернул res , не подождав промиса?
источник

VP

Vitaliy Ponomarev in React Native — русскоговорящее сообщество
Bogdan Shelomanov
а что у него не так? типо вернул res , не подождав промиса?
промис отработал, но значения из then и из самой функции не вернул
источник

T

Timur in React Native — русскоговорящее сообщество
Bogdan Shelomanov
а что у него не так? типо вернул res , не подождав промиса?
переписал вот так:

const getUserCoordinates = async () => {
 let res = null;

 RNLocation.configure({
  distanceFilter: 5.0
 });
 const granted = await RNLocation.requestPermission({
  ios: 'whenInUse',
  android: {
   detail: 'fine'
  }
 });

 if (granted) {
  return new Promise((resolve, reject) => {
   RNLocation.subscribeToLocationUpdates(locations => {
    res = {
     lat: locations[0].latitude,
     lon: locations[0].longitude,
    };
    setUserCoordinates(res);

    if (!locations) {
     return reject();
    }

    return resolve(res);
   });
  });
 } else {
  setOrderType('rating');
  return null;
 }

};
источник

BS

Bogdan Shelomanov in React Native — русскоговорящее сообщество
Timur
переписал вот так:

const getUserCoordinates = async () => {
 let res = null;

 RNLocation.configure({
  distanceFilter: 5.0
 });
 const granted = await RNLocation.requestPermission({
  ios: 'whenInUse',
  android: {
   detail: 'fine'
  }
 });

 if (granted) {
  return new Promise((resolve, reject) => {
   RNLocation.subscribeToLocationUpdates(locations => {
    res = {
     lat: locations[0].latitude,
     lon: locations[0].longitude,
    };
    setUserCoordinates(res);

    if (!locations) {
     return reject();
    }

    return resolve(res);
   });
  });
 } else {
  setOrderType('rating');
  return null;
 }

};
а как вызываешь?
источник

T

Timur in React Native — русскоговорящее сообщество
const coords = await getUserCoordinates();

console.log(coords);
источник

BS

Bogdan Shelomanov in React Native — русскоговорящее сообщество
Timur
const coords = await getUserCoordinates();

console.log(coords);
и как, отработало?
источник

T

Timur in React Native — русскоговорящее сообщество
Замечательно, вернуло координаты)
источник

VP

Vitaliy Ponomarev in React Native — русскоговорящее сообщество
Timur
Замечательно, вернуло координаты)
Промис внутри не нужен, достаточно еще один await и throw

getUserCoordinates уже и так асинхронная

но вообще это уже в @js_ru / @js_noobs_ru лучше или в личке
источник

АГ

Артем Гринцевич in React Native — русскоговорящее сообщество
Irakliy
а обычный SafeAreaView из рн/реакт навигейшн не помогает?
Обычный SafeArea не работает для андроида
источник