Tengo muy pocos conocimientos en JavaScript, así que disculpe de antemano esta pregunta.
tengo un metodo:
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 or later"); result = "Windows 11 or later"; } else if (majorPlatformVersion > 0) { console.log("Windows 10"); result = "Windows 10"; } else { console.log("Before Windows 10"); result = "Before Windows 10"; } } else { console.log("Not running on Windows"); result = "Not running on Windows"; } }); return result; }Y devuelve una cadena vacía, pero imprime para consolar el valor correcto.
Por favor, dime cuál es mi error y cómo devolver el valor aquí, quiero usarlo después.
¡Gracias!
Tienes que hacer dos cosas. Primero devuelve la promesa con:
return navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then(...). Luego, return el valor deseado desde el controlador .then() . El primer retorno anterior devolverá la promesa de su función. El return dentro del controlador .then() hará que ese valor se convierta en el valor resuelto de la promesa que está devolviendo.
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 or later"); return "Windows 11 or later"; } else if (majorPlatformVersion > 0) { console.log("Windows 10"); return "Windows 10"; } else { console.log("Before Windows 10"); return "Before Windows 10"; } } else { console.log("Not running on Windows"); return "Not running on Windows"; } }); }Entonces, lo llamarías así:
userAgent().then(result => { // use the result here console.log(result); });