Tengo un código javascript como este:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
Siempre tengo un valor indefinido para la prueba var. Creo que se debe a que las promesas aún no se han resuelto ... ¿hay alguna forma de devolver un valor de una promesa?
javascript
promise
Priscy
fuente
fuente
then()
llamada es nuevamente una promesa, que envuelve el valor que devolvió.promise
. No lo muestra definido en ninguna parte y no devuelve nada de sujustTesting()
función. Si desea una mejor ayuda, debe describir el problema que está tratando de resolver en lugar de simplemente mostrarnos un código que está tan "apagado" que ni siquiera ilustra lo que realmente está tratando de hacer. Explique el problema que está tratando de resolver.Respuestas:
Cuando devuelve algo de una
then()
devolución de llamada, es un poco mágico. Si devuelve un valor,then()
se llama al siguiente con ese valor. Sin embargo, si devuelve algo parecido a una promesa, el siguiente lothen()
espera y solo se llama cuando esa promesa se establece (tiene éxito / falla).Fuente: https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing-asynchronous-actions
fuente
Para usar una promesa, debe llamar a una función que crea una promesa o debe crear una usted mismo. Realmente no describe qué problema está realmente tratando de resolver, pero así es como crearía una promesa usted mismo:
O, si ya tiene una función que devuelve una promesa, puede usar esa función y devolver su promesa:
fuente
return
, es decir,justTesting
dicereturn.then => return
. Sé que esto funciona porque lo he implementado (bcs linting me obligó a, lejos denew Promise
), pero ¿puedes explicar cómo entender / pensar en ese par de retorno / retorno?.then()
es una función separada de la función contenedora, por lo que cuando se llama, tiene su propio valor de retorno. En segundo lugar, el valor de retorno de un.then()
controlador se convierte en el valor resuelto de la promesa. Entonces,.then(val => {return 2*val;})
está cambiando el valor resuelto deval
a2*val
.Lo que he hecho aquí es que he devuelto una promesa de la función justTesting. A continuación, puede obtener el resultado cuando se resuelva la función.
¡Espero que esto ayude!
fuente
Prefiero usar el comando "await" y las funciones asíncronas para deshacerme de las confusiones de las promesas,
En este caso, primero escribiría una función asincrónica, esta se usará en lugar de la función anónima llamada en "promesa. Luego" parte de esta pregunta:
y luego llamaría a esta función desde la función principal:
Observando que devolví la función principal y la función secundaria a las funciones asíncronas aquí.
fuente