使用deviceinfo和geolocation将本机pormise.all做出反应

时间:2018-05-24 09:01:25

标签: react-native promise

我正在构建我的第一个反应原生应用程序,我正在使用DeviceInfo(react-native-device-info)和地理位置API。

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

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

他们两个都回来了承诺。如何将它们与promise.all()

等合并

1 个答案:

答案 0 :(得分:1)

好吧,我研究了你的代码,但你所做的事情并没有被称为承诺,你是客观地给函数回调而不是使用.then来解决这个承诺

检查GetMacAddress here的API,同时getCurrentPosition不使用promises,而是使用回调,它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.
}

现在macAddresscurrentPosgetMACAddressgetCurrentPosition函数的输出。

如果您未使用异步功能,则可以执行以下操作:

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