如何在将它们发送到 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(...)