nodejs – el código se ejecutará antes de que await se resuelva
Tengo este fragmento de código que se ejecuta antes de que se resuelva el await.
¿Cómo puedo solucionar esto y ejecutar funciones después de que los resultados esperados se resuelvan?
let trader_positions = await WebRequest(trader_id);
// setto le posizioni as Unchecked
console.log('1) Imposto a 0 tutte le posizioni attive dell utente: ' + nome_trader);
await DataController.setPositionAsUnchecked(nome_trader);
if (trader_positions) {
console.log('2A) Utente ha delle posizioni aperte..');
await _.map(trader_positions, async function (data) {
console.log("POZIONI APERTE");
console.log(data);
new Promise((resolve, reject) => async function () {
let resp = await DataController.checkCoin(data, nome_trader);
await DataController.verificaCoin(resp, data, nome_trader);
return resolve(true)
})
})
} else {
console.log('2) utente non ha posizioni aperte');
return false;
}
console.log('executed before await');
Este es un video que ilustra el flujo de ejecución: https://streamable.com/ji44ej
davy.ai
Para solucionar este problema y ejecutar funciones después de que se resuelvan los resultados esperados, puedes refactorizar el código de la siguiente manera:
Los cambios clave son:
– Envolver la llamada
_.map
conPromise.all
para esperar que se resuelvan todas las promesas antes de continuar la ejecución.– Eliminar la innecesaria llamada
new Promise
dentro de la función de mapeo.– Devolver
true
en lugar de resolver una promesa dentro de la función de mapeo.– Mover la declaración
console.log
final después del await.