реагировать на родной pormise.all с deviceinfo и геолокацией - PullRequest
0 голосов
/ 24 мая 2018

Я создаю свое первое собственное реактивное приложение и использую DeviceInfo (act-native-device-info) и API геолокации.

DeviceInfo.getMACAddress(mac => console.log(mac);

и

navigator.geolocation.getCurrentPosition(position => console.log(position)

обаони возвращают обещание.Как объединить их с чем-то вроде promise.all()

1 Ответ

0 голосов
/ 24 мая 2018

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

ПроверкаAPI GetMacAddress здесь также getCurrentPosition не использует обещания, вместо этого он использует обратные вызовы, здесь api .

Что вы можете сделать, чтобы использовать Promise.all в том, что вы можете заключить getCurrentPosition в обещание, а затем использовать promise.all с DeviceInfo.

заключить getposition в обещание:

const getPosition = (options) => {
  return new Promise((resolve, reject) => {
    navigator.geolocation.getCurrentPosition(resolve, reject, options);
  });
}

теперь используйте Promise.all вот так:

const getData = async () => {
        const [macAddress, currentPos] = await Promise.all([
            DeviceInfo.getMACAddress(),
            getPosition(),
        ]);

        // use macAddress and currentPosition here.
}

Теперь macAddress и currentPos являются выходами функций getMACAddress и getCurrentPosition.

Если вы не используете асинхронный режимфункции, то вы можете сделать следующее:

Promise.all([
    DeviceInfo.getMACAddress(),
    getPosition(),
]).then((macAddress, pos) => {
    // access macAddress and pos in this func
}).catch((error) => {
    // access any error here
})
...