function fakeRequest(url) { return new Promise((resolve, reject) => { delay = Math.floor(Math.random() * 4500) + 500; setTimeout(() => { if (delay > 4500) { resolve(url + ": success") } else { reject(url = ": error") } }, delay); }) }) } async function makeTwoRequests() { let data1 = await fakeRequest("/page1"); console.log("Data 1:", data1) let data2 = await fakeRequest("/page2"); console.log("Data 2:", data2) } makeTwoRequests() Cuando elimino data1 o data2 y solo tengo 1 en espera, funciona. Pero cuando hay 2 o más, sale un error diciendo: No Uncaught (in promise) : error No sé qué está pasando aquí. Por favor, ayúdame
¡Gracias!
Si esperas una promesa que rechaza, se convierte en un error arrojado.
Cambie el reject dentro de fakeRequest a una resolución y apuesto a que el problema desaparece.
Esto funciona para mí:
function fakeRequest(url) { return new Promise((resolve, reject) => { let delay = Math.floor(Math.random() * 4500) + 500; setTimeout(() => { if (delay > 4500) { resolve(url + ": success") } else { resolve(url + ": error") } }, delay); }) } async function makeTwoRequests() { let data1 = await fakeRequest("/page1"); console.log("Data 1:", data1) let data2 = await fakeRequest("/page2"); console.log("Data 2:", data2) } makeTwoRequests()Hubo un par de otros problemas con el código de muestra:
delay debe declararse con una palabra clave como let , const o var ; esto es necesario para garantizar que cada invocación de la función use su propia versión privada en lugar de una compartida, y para evitar que esta función cambie las variables en el ámbito externo.reject usa = en lugar de + , que redefine y devuelve la variable url en lugar de concatenar la cadena de URL con el literal : error}) , que impidió que este código se analizaraPero creo que entiendo lo que está haciendo: está tratando de simular una situación en la que las llamadas a la API generalmente tienen éxito, excepto algunas que fallan por el tiempo de espera.
Su fakeRequest logra eso, pero su código de llamada no es capaz de manejar el problema. Para eso, necesitarías algo como esto:
async function makeTwoRequests() { let data1 try { data1 = await fakeRequest("/page1"); } catch ( error ) { console.error(`request 1 threw`, error) // here, you might return, or re-throw, or fall through } let data2 try { data2 = await fakeRequest("/page2"); } catch ( error ) { console.error(`request 2 threw`, error) // here, you might return, or re-throw, or fall through } }