Estoy aprendiendo promesa en JavaScript, pero no entiendo por qué mi función no devuelve el valor correcto.
Esta es mi función:
function promise() { let p = new Promise((resolve, reject) => { return resolve(["a", "random", "array"]); }); p.then((response) => { return response; }).catch((error) => { return error; }); } console.log(promise()); Si ejecuto el código obtengo undefined .
Creo que el problema es que console.log se ejecuta antes de que se devuelva el valor de .then .
¿Puede alguien ayudarme a resolver este problema y tal vez explicar el problema? :)
Gracias por cada respuesta.
Dos cosas:
Debe return la promesa p desde dentro de la función de promise .
Debe esperar el resultado de la promesa devuelta por la función antes de poder acceder a su valor cumplido:
function promise() { let p = new Promise((resolve, reject) => { return resolve(["a", "random", "array"]); }); p.then((response) => { return response; }).catch((error) => { return error; }); // 1. Return the promise from the function: return p; } // 2. Await the result before using it: promise().then((result) => { console.log(result); });Dijiste que estabas aprendiendo sobre promesas. Async/await hace todo esto mucho más fácil:
<script type="module"> // Top level await is available in ES modules async function promise () { try { return ["a", "random", "array"]; } catch (exception) { return exception; } } const result = await promise(); console.log(result); </script>