我正在构建我的第一个反应原生应用程序,我正在使用DeviceInfo(react-native-device-info)和地理位置API。
DeviceInfo.getMACAddress(mac => console.log(mac);
和
navigator.geolocation.getCurrentPosition(position => console.log(position)
他们两个都回来了承诺。如何将它们与promise.all()
答案 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.
}
现在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
})