Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

97
Visualizações
async/await no espera antes de ejecutar la siguiente línea en JS

Encontré una función de retroceso exponencial que se supone que vuelve a intentar una búsqueda de API en caso de un error en los retrasos exponenciales:

 async function exponentialBackoff(toTry, max, delay) { console.log('max', max, 'next delay', delay); try { let response = await toTry() return response; } catch (e) { if (max > 0) { setTimeout(function () { exponentialBackoff(toTry, --max, delay * 2); }, delay); } else { console.log('maximum amount of tries exceeded', e); return e; } } }

Luego uso la función con la ayuda de la biblioteca API de GA para realizar una solicitud. A propósito, estoy enviando un cuerpo no válido para que la solicitud falle:

 response = await exponentialBackoff(async function () { return await gapi.client.request({ path: 'https://analyticsadmin.googleapis.com/v1beta/properties', method: 'POST', body: property }) }, 10, 30) console.log("NEXT LINE");

Lo que esperaría es que el retroceso exponencial se agotara en todos los intentos (10) y solo después de eso ejecutaría el registro de la consola.

Lo que realmente sucede es que el registro de la consola se ejecuta justo después del primer intento. ¿Qué estoy haciendo mal allí?

Gracias

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

  1. Promete setTimeout y await . Una variante prometida es

     function sleep(ms) { return new Promise(res => { setTimeout(res, ms); }); }
  2. await exponentialBackoff en el bloque catch .

El código fijo es:

 function sleep(ms) { return new Promise(res => { setTimeout(res, ms); }); } async function exponentialBackoff(toTry, max, delay) { console.log('max', max, 'next delay', delay); try { let response = await toTry() return response; } catch (e) { if (max > 0) { await sleep(delay); return await exponentialBackoff(toTry, --max, delay * 2); } else { console.log('maximum amount of tries exceeded', e); return e; } } }
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda