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.

La función no devuelve un valor cuando se utiliza una promesa, JavaScript.

Tengo muy pocos conocimientos en JavaScript, así que disculpa de antemano por esta pregunta.

Tengo un método:

function userAgent() {
  var result = "";

  navigator.userAgentData
    .getHighEntropyValues(["platformVersion"])
    .then((ua) => {
      if (navigator.userAgentData.platform === "Windows") {
        const majorPlatformVersion = parseInt(ua.platformVersion.split(".")[0]);
        if (majorPlatformVersion >= 13) {
          console.log("Windows 11 o posterior");
          result = "Windows 11 o posterior";
        } else if (majorPlatformVersion > 0) {
          console.log("Windows 10");
          result = "Windows 10";
        } else {
          console.log("Anterior a Windows 10");
          result = "Anterior a Windows 10";
        }
      } else {
        console.log("No se está ejecutando en Windows");
        result = "No se está ejecutando en Windows";
      }
    });

  return result;
}

Y devuelve una cadena vacía, pero imprime en la consola el valor correcto.

Por favor, dime cuál es mi error y cómo devolver el valor aquí, quiero poder usarlo después.

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con la función userAgent() es que devuelve la variable result antes de que se resuelva la Promise dentro del método then(). Esto significa que la variable result aún es una cadena vacía cuando se devuelve fuera del método then().

    Para solucionar este problema, una solución es devolver la Promise en sí misma y usar then() para manejar el valor resuelto fuera de la función. Por ejemplo:

    function userAgent() {
      return navigator.userAgentData
        .getHighEntropyValues(["platformVersion"])
        .then((ua) => {
          if (navigator.userAgentData.platform === "Windows") {
            const majorPlatformVersion = parseInt(ua.platformVersion.split(".")[0]);
            if (majorPlatformVersion >= 13) {
              console.log("Windows 11 o posterior");
              return "Windows 11 o posterior";
            } else if (majorPlatformVersion > 0) {
              console.log("Windows 10");
              return "Windows 10";
            } else {
              console.log("Antes de Windows 10");
              return "Antes de Windows 10";
            }
          } else {
            console.log("No se está ejecutando en Windows");
            return "No se está ejecutando en Windows";
          }
        });
    }
    

    Luego, llamar a la función userAgent() devolverá una Promise que se puede manejar usando then() para obtener el valor resuelto:

    userAgent().then((result) => {
      // Utiliza el valor de resultado aquí
    });
    

    Alternativamente, puedes usar async/await para manejar la Promise de una manera más sincrónica:

    async function main() {
      const result = await userAgent();
      // Utiliza el valor de resultado aquí
    }
    
    main();
    

Comments are closed.