Cuando ejecuto el script (ver más abajo), el primer intento falla al obtener el resultado,
la variable "resultado" da como resultado "subfinado"
var result; Promise.resolve('information') .then(res => {return result=res}) result;Intento #1
En el segundo intento, los valores ya están asignados
Pregunta: ¿Cómo puedo esperar asignar un valor a la variable "resultado", sin usar setTimout y console.log
Esperando con un ciclo while
var result; var finito = false; Promise.resolve('information') .then(res => {return result=res}) while(finito != true) { if (result != undefined) { result; finito=true; } }Mi pregunta para Jay Surya:
Este código no funciona
Mi pregunta para Azarro:
La mejor solución para esto es usar async-await, ya que parece que necesita result para otras operaciones. Si aún desea utilizar el enfoque .then(), tendrá que mover su var result y todos los pasos posteriores que necesitan result , al .then()
Promise.resolve('information').then(res=>{ var result = res; var finito=true; //all that follows })Pero, alternativamente, si usa async-await,
var result; var finito = false; result = await Promise.resolve('information');//the lines below will not be executed, until this promise resolves while(finito != true) { if (result != undefined) { result; finito=true; } }Por supuesto, await solo se puede usar dentro de una función marcada como asíncrona.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve
Promise.resolve devuelve una promesa. Si va acompañado de un .then , hará un seguimiento del .then() de forma asíncrona (casi inmediatamente, énfasis en casi ) y se resolverá como una Promesa.
Si desea que el resultado obtenga el valor real, tendrá que usar await para forzar al código a actuar sincrónicamente y esperar el valor de la promesa.
async function someWrappedFunction() { const result = await Promise.resolve('information'); } Alternativamente, puede mover su código dentro del bloque .then de Promise para que tenga garantizado un valor allí.
Editar: ¿Puedes probar lo siguiente:
var result; var finito = false; var result = await Promise.resolve('information'); while(finito != true) { if (result != undefined) { result; finito=true; } }