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.

Convertir el valor de una promesa a una cadena de caracteres (pregunta a cookieStore.get)

Estoy intentando obtener una parte de un valor de una cookie en un sitio web. Así que he escrito código para obtener el valor de la cookie, que funciona bien. Intenté convertir el valor devuelto en una cadena usando JSON.stringify(), pero en cambio lo convierte en un objeto vacío. Sospecho que esto se debe a que el objeto devuelto es un objeto Promise, pero no sé por qué eso haría una diferencia. Esto es lo que he hecho hasta ahora.

const getCookie = async (name) => {
  const cookie = await cookieStore.get(name);
  if (cookie) { return cookie.value }
  else { console.log('cookie not found') }
}
const cookievalue = getCookie('foo');

Y esto devuelve:

Promise { <fulfilled>: 'locale%3Des_us' }

Que de hecho es el valor de la cookie que quiero. Pero si luego ejecuto:

const newcookievalue = JSON.stringify(cookievalue);

Obtengo:

'[object Promise]'

Por cierto, lo que estoy intentando hacer es ejecutar una instrucción IF en ese valor: si es “es_us” haga una cosa, si es “en_us” haga otra cosa. Por ahora, la instrucción IF en getCookie solo está probando en la consola si puedo obtener y convertir el valor en una cadena antes de poner el código en mi aplicación.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que getCookie devuelve una Promise, ya que es una función asíncrona. Cuando intentas convertir cookievalue a una cadena, estás intentando convertir el objeto Promise en lugar del valor resuelto.

    Para obtener el valor resuelto, puedes usar el método .then() de la Promise. Entonces, el código actualizado se vería así:

    const getCookie = async (name) => {
      const cookie = await cookieStore.get(name);
      if(cookie) {return cookie.value}
      else {console.log('cookie not found')}
    }
    
    const cookiePromise = getCookie('foo');
    cookiePromise.then(cookievalue => {
      const newcookievalue = JSON.stringify(cookievalue);
      console.log(newcookievalue);
      // ejecuta tu sentencia IF aquí usando el valor de cookie resuelto
    });
    

    Aquí, almacenamos el objeto Promise devuelto por getCookie en cookiePromise, y luego usamos el método .then() para acceder al valor resuelto. Dentro de la función de devolución de llamada .then(), podemos convertir a cadena el valor resuelto y almacenarlo en newcookievalue.

Comments are closed.