es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El valor de una función asíncrona no se puede utilizar.

Guardé el token en AsyncStorage para ser recuperado para la autenticación, pero el problema es que cada vez que obtengo el valor, lo registro en la consola y funciona, pero no envía el token a la cabecera, he probado varios métodos pero toda la lógica parece abortiva. Por favor, ayuda con tu experiencia, ¿o estoy usando incorrectamente el AsyncStorage?

export const editProfile = (userData) => {

  const storageGet = async () => {
    try {
      const result = await AsyncStorage.getItem("token");
      console.log("data", result);
      console.warn("data", result);
      return result;
    } catch (error) {
      console.log(error);
    }
  }

  return (dispatch, getState) => {
    const userId = getState().auth.id
    axios.put(`${url}/users/${userId}`, userData,
      (async () => {                       // bloque de código para establecer el token de autenticación en la cabecera
        try {
          const x = await storageGet()
          console.log("nowToken", x)            // devuelve el token en la consola
          setHeaders(x)                         // pero no establece el token en la cabecera
        } catch (err) {
          console.log(err.response)
        }
      })()
      //  setHeaders(token)
    )
      .then(response => {
        dispatch({
          type: "EDIT_PROFILE_SUCCESS",
          username: response.data.username,
          email: response.data.email,
          name: response.data.name,
          phoneNumber: response.data.phoneNumber,
          biography: response.data.biography,
          gender: response.data.gender,
          address: response.data.address,
          message: response.data.message,
          success: response.data.success
        })
      })
      .catch((error) => {
        console.log(error.response)
      })
  }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En primer lugar, se recomienda utilizar la sintaxis async/await en lugar de utilizar devoluciones de llamada dentro de promesas. En segundo lugar, sería útil ver la implementación de la función setHeaders(). Sin saber exactamente qué hace, es difícil identificar el problema exacto.

    Algunas sugerencias son:
    – Intenta registrar las cabeceras de la solicitud para ver si el token se está configurando correctamente.
    – Verifica si la función setHeaders() se está llamando correctamente y si se le están pasando los argumentos correctos.
    – Verifica si la función setHeaders() realmente está estableciendo las cabeceras de la solicitud.

    Aquí hay una versión actualizada del código:

    export const editProfile = (userData) => {
      const storageGet = async () => {
        try {
          const result = await AsyncStorage.getItem("token");
          console.log("token", result); // Registra el token aquí con fines de depuración
          return result;
        } catch(error) {
          console.log(error);
        }
      }
    
      return async (dispatch, getState) => { // Utiliza async/await aquí en lugar de devoluciones de llamada
        const userId = getState().auth._id;
    
        try {
          const token = await storageGet();
          console.log("nowToken", token); // Registra el token aquí con fines de depuración
          setHeaders(token); // Establece las cabeceras con el token recuperado
    
          const response = await axios.put(`${url}/users/${userId}`, userData);
          dispatch({
            type: "EDIT_PROFILE_SUCCESS",
            username: response.data.username,
            email: response.data.email,
            name: response.data.name,
            phoneNumber: response.data.phoneNumber,
            biography: response.data.biography,
            gender: response.data.gender,
            address: response.data.address,
            message: response.data.message,
            success: response.data.success
          });
        } catch(error) {
          console.log(error.response);
        }
      }
    }
    

Comments are closed.