Sé que esta es una pregunta común, pero tengo un pequeño problema al intentar activar una función, SOLO cuando se ha devuelto una promesa. También quiero tomar el valor devuelto de la promesa.
hello() Parece que cuando disparo, ejecuto mi código a continuación, validPassengerId y hello() console.logs, antes de que se resuelva la promesa.
¿Cómo reescribo este código para:
Espere a que la promesa se resuelva.
Luego tome el valor de la promesa resuelta: validPassengerId. (Y luego console.log).
¿Y luego disparar la función hello() ?
function hello() { console.log("hello"); }; const promise = new Promise((resolve, reject) => { let validPassengerId = _funnelBasketLuggageService.FindValidPassengerIdForBag(PassengerIds, bagsAssignedToPassengers, bag); resolve(validPassengerId); }); promise.then(validPassengerId => { console.log("validPassengerId", validPassengerId); hello(); });Si de hecho _funnelBasketLuggageService.FindValidPassengerIdForBag devuelve una promesa, resuelve esto sin crear tu propia Promise :
function hello() { console.log("hello"); }; const promise = _funnelBasketLuggageService.FindValidPassengerIdForBag(PassengerIds, bagsAssignedToPassengers, bag); promise.then(validPassengerId => { console.log("validPassengerId", validPassengerId); hello(); }); Explicación Lo que hizo fue envolver la Promise devuelta por FindValidPassengerIdForBag en otra Promise que se devuelve inmediatamente.
Si absolutamente tiene que envolverlo en su propia Promise , por ejemplo, porque necesita hacer un preprocesamiento, use .then en lugar del valor de retorno de la función:
function hello() { console.log("hello"); }; const promise = new Promise((resolve, reject) => {_funnelBasketLuggageService.FindValidPassengerIdForBag(PassengerIds, bagsAssignedToPassengers, bag).then(id=>resolve(id)); }); promise.then(validPassengerId => { console.log("validPassengerId", validPassengerId); hello(); });Suponiendo FindValidPassengerIdForBag devuelva una promesa, no necesita envolverla en otra promesa. Lo usarías así:
_funnelBasketLuggageService .FindValidPassengerIdForBag(PassengerIds, bagsAssignedToPassengers, bag) .then(validPassengerId => { console.log("validPassengerId", validPassengerId); hello(); }); Si validPassengerId es nulo con este código, entonces eso debe ser a lo que FindValidPassengerIdForBag está resolviendo su promesa. Si no esperaba eso, verifique el código de FindValidPassengerIdForBag o verifique que esté pasando parámetros válidos.