Dado quepromise1 ypromise2 se resuelven correctamente con el siguiente código:
export const getExistingPayments = async (payments: Payment[]) => { const promise1 = await getPayment(payments[0].paymentId) const promise2 = await getPayment(payments[1].paymentId) const results = [promise1, promise2] return results }¿Alguien puede ayudar a explicar por qué el siguiente código simplemente se cuelga, las promesas nunca se resuelven ni se rechazan?
export const getExistingPayments = async (payments: Payment[]) => { const promise1 = getPayment(payments[0].paymentId) const promise2 = getPayment(payments[1].paymentId) const results = await Promise.all([promise1, promise2]) return results }También podría valer la pena mencionar que cuando solo se pasa una promesa a Promise.all la promesa se resuelve como se esperaba, el siguiente código también funciona bien:
export const getExistingPayments = async (payments: Payment[]) => { const promise1 = getPayment(payments[0].paymentId) const results = await Promise.all([promise1) return results }Esto depende en gran medida de lo que suceda dentro getPayment . En general, su segundo ejemplo debería funcionar, pero hay casos en los que eso no sucede, particularmente, si las dos llamadas getPayment , debido a algunas operaciones internas, se esperan entre sí, llegando a un punto muerto.
Si bien según la información que proporcionó, no podemos decirle exactamente qué sucede en su código, la solución que aplique debe ser asegurarse de que las llamadas a getPayment nunca provoquen un punto muerto si se ejecutan de forma asincrónica.
Prueba algo como esto, en lugar de asignar el resultado de las funciones a una variable
const [results1, result2] = await Promise.all([ getPayment(payments[0].paymentId), getPayment(payments[1].paymentId) ])