Actualmente estoy aprendiendo JavaScript asíncrono, y estoy confundido acerca de cómo obtener los valores devueltos por una promesa de mi código:
let p = Promise.resolve("Passed") let x = p.then(msg=>msg).catch(msg=>msg) setTimeout(()=>console.log(x), 2) console.log(x)Producción:
Promise { <pending> } Promise { 'Passed' } ¿Cómo puedo obtener la cadena "Aprobada" que devuelve la función .then y por qué la promesa está pendiente incluso cuando se resuelve la Promesa? Pero cuando console.log . registramos su valor usando una función setTimeout , se da su valor y cómo obtener el "Passed" de Promise { 'Passed' }
Está destinado a usar promesas de esta manera:
p.then((x) => { console.log(x); });o de esta manera (solo funciona en funciones asíncronas):
x = await p;Normalmente, p sería en realidad una función que devuelve una promesa, como esta:
function p() { return new Promise((resolve, reject) => { resolve("message"); }); }No puede obtener una respuesta de la promesa en este momento. Para resolverlo, puede usar 2 enfoques:
suscríbase dentro de entonces con una nueva función que obtiene el resultado de la promesa // pero sería asincrónicamente así
var p = Promise.resolve([1,2,3]); p.then(function(v) { console.log(v[0]); // 1 });el segundo es: usar la función asíncrona con la estructura de espera
async function f() { let promise = new Promise((resolve, reject) => { setTimeout(() => resolve("done!"), 1000) }); let result = await promise; // in this part it will be wait until promise will end its work alert(result); // "done!" } f();