如何在将它们发送到 Firebase 之前正确修改 Formik 中的值?
How to properly modify values in Formik before sending them to Firebase?
我正在尝试将地址的纬度和经度发送到 Firebase 数据库。奇怪的是,该值确实被注销了,但不会发送到数据库。
我正在使用 React Geocode 库来获取经度和纬度。它可以工作(它们确实被记录到控制台),但显然它需要一些时间才能工作,因为它不是发送到数据库的值。
我做了一些研究,认为这可能是因为我在某处没有异步功能。这真的是问题所在吗?
onSubmit={(values, { setSubmitting }) => {
values.address = `${values.street}, ${values.num}, ${values.neighbourhood}, ${values.city}`
Geocode.fromAddress(values.address).then(
response => {
const { lat, lng } = response.results[0].geometry.location;
values.latitude = lat.toString() //why doesn't this work?
values.longitude = lng.toString() //why doesn't this work?
console.log(values.latitude) //this will log on the console
//but won't go to the database
},
error => {
console.error(error);
}
);
const { name, latitude, longitude, rating, address } = values
const valuesToSend = { name, latitude, longitude, rating, address }
async function writeToFirebase() {
await firestore.collection('businessesPendingAdminApproval').add(valuesToSend)
}
writeToFirebase()
}}>
之所以不起作用,是因为您修改了 Geocode.fromAddress
的 .then
中的值,这是一个异步调用。而且因为您不在调用中使用 await
,所以代码只是绕过它并直接转到 firebase 调用。
你需要做的是在Geocode.fromAddress
之前添加await
。
await Geocode.fromAddress(values.address).then(...)
我正在尝试将地址的纬度和经度发送到 Firebase 数据库。奇怪的是,该值确实被注销了,但不会发送到数据库。
我正在使用 React Geocode 库来获取经度和纬度。它可以工作(它们确实被记录到控制台),但显然它需要一些时间才能工作,因为它不是发送到数据库的值。
我做了一些研究,认为这可能是因为我在某处没有异步功能。这真的是问题所在吗?
onSubmit={(values, { setSubmitting }) => {
values.address = `${values.street}, ${values.num}, ${values.neighbourhood}, ${values.city}`
Geocode.fromAddress(values.address).then(
response => {
const { lat, lng } = response.results[0].geometry.location;
values.latitude = lat.toString() //why doesn't this work?
values.longitude = lng.toString() //why doesn't this work?
console.log(values.latitude) //this will log on the console
//but won't go to the database
},
error => {
console.error(error);
}
);
const { name, latitude, longitude, rating, address } = values
const valuesToSend = { name, latitude, longitude, rating, address }
async function writeToFirebase() {
await firestore.collection('businessesPendingAdminApproval').add(valuesToSend)
}
writeToFirebase()
}}>
之所以不起作用,是因为您修改了 Geocode.fromAddress
的 .then
中的值,这是一个异步调用。而且因为您不在调用中使用 await
,所以代码只是绕过它并直接转到 firebase 调用。
你需要做的是在Geocode.fromAddress
之前添加await
。
await Geocode.fromAddress(values.address).then(...)