【发布时间】:2020-09-01 12:50:20
【问题描述】:
我有一个完成两个等待任务的函数,一个从云中的数据库中获取信息,另一个获取用户位置。该函数应该返回一个包含这两个任务结果的承诺。出于某种原因,the promise will only return the result of the first await (database...), not the second (Geolocation...)。这是一些与问题相关的代码。
async function grabUserData(): Promise<Object> {
const data = {
position: {Latitude: 0, Longitude: 0},
altitude: 0,
altitudeAccuracy: 0,
timestamp: Timestamp.now(),
};
await database
.collection('users')
.doc(userUID)
.get()
.then((doc) => {
if (doc.exists) {
'does some work here' (which works fine)
} else {
console.log('No such document!');
}
});
await Geolocation.getCurrentPosition((position) => {
data.position.Longitude = position.coords.longitude;
data.position.Latitude = position.coords.latitude;
if (position.coords.altitude != null) {
data.altitude = position.coords.altitude;
}
if (position.coords.altitudeAccuracy != null) {
data.altitudeAccuracy = position.coords.altitudeAccuracy;
}
});
return new Promise(function (resolve) {
resolve(data);
});
}
更新:Geolocation.getCurrentPosition 不返回承诺,因此它不应该在它旁边等待。但是,即使删除它,它也不会改变与我遇到的问题相关的任何内容。我实际上把它放在那里是因为我认为通过等待它,它不会被跳过并返回不完整的数据。
【问题讨论】:
-
Geolocation.getCurrentPosition不返回承诺,你不能await它。 -
好吧,我知道它没有返回一个承诺,但是由于在文档中它说该方法可能需要一段时间,我想如果我不等待它,它会跳过它并返回数据不完整。
标签: typescript react-native promise async-await