Cómo detener la solicitud de recuperación de datos utilizando un tiempo de espera en la solicitud fetch mientras se añaden intervalos.
Estoy realizando una encuesta para mi informe, agregando un intervalo de 5 segundos entre cada solicitud.
const addDelay = timeout => new Promise(resolve => setTimeout(resolve, timeout))
export const miInforme = () => async (dispatch) => {
dispatch({
type: constants.SOLICITUD_DESCARGA_INFORME
})
let url = `/admin/dashboard/report.js?project_id=${projectId}&tool_id=${toolId}`
try {
const suscribirse = async (uri) => {
let response = await fetch(uri, {
method: 'GET 39;,
headers: {
'content-type': 'application/json',
'x-api-token': `Bearer ${token}`
}
})
const resBody = await response.json()
if (resBody.status === 'éxito') {
window.location.href = resBody.url
dispatch({
type: constants.DESCARGA_INFORME_EXITO
})
} else {
await addDelay(5000)
await suscribirse(url)
// return;
// setTimeout(() => {
// dispatch({
// type: constants.SHOW_DOWNLOAD_POPUP
// })
// return;
// }, 15000);
}
}
suscribirse(url)
} catch (error) {
dispatch({
type: constants.DESCARGA_INFORME_ERROR,
errorMessage: error.status
})
}
}
Ahora, aquí quiero detener la encuesta después de 15 segundos y mostrar una ventana emergente.
El problema es que no puedo agregar setTimeout aquí porque estoy usando async
. Además, no deja de llamar al método subscribe
una y otra vez, ya que sigue entrando en la parte del else, return
no funciona.
Quiero salir de la parte del else, dejar de llamar a la función y mostrar una ventana emergente después de que hayan transcurrido 15 segundos. ¿Cómo puedo lograr esto?
davy.ai
Para lograr esto, puedes utilizar una variable local para llevar un registro del tiempo total transcurrido y salir de la recursión si excede los 15 segundos. Así es como puedes modificar tu código:
Esto debería resolver tu problema permitiéndote detener el sondeo después de 15 segundos y mostrar un popup.