Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

197
Views
¿Cómo puedo ejecutar una función con promesas y verificar su valor varias veces mediante una llamada API y ejecutar otra función con el valor?

Estoy trabajando en una aplicación donde necesito hacer una llamada a la API que está en una función y luego usar su valor para hacer otra llamada a la API. Pero el valor de la primera llamada a la API no está disponible ya que depende de algunos factores externos. Entonces, después de hacer la primera llamada a la API, necesito hacer 3 llamadas a la API en intervalos de 5 segundos para verificar si el valor está disponible o no. Si es así, realice la segunda llamada a la API; de lo contrario, no realice la segunda llamada a la API.

Ahora sé que tengo que hacer Promesas y traté de hacerlo, pero no estoy seguro de si lo que estoy haciendo es correcto.

Esto es lo que podría hacer con la función Promise:

 const promiseFunc = ( param1, param2 ) => { return new Promise(( resolve, reject ) => { const func1 = api1( param1 ); if ( func1.code === '200' ) { const startInterval = setInterval( () => { const check = getValue(); if ( check && check === param2 ) { clearInterval( startInterval ); resolve(); } else { reject(); } }, 5000); } else { reject(); } }); }

Entonces, lo que está sucediendo en la función anterior es que se necesitan dos parámetros para llamar a las llamadas a la API. func1 se ejecuta y, si devuelve 200, inicia el temporizador de intervalos. Tenga en cuenta que la llamada a la función api1 es la llamada a la API. Intenté usar await allí pero arroja un error. Y no estoy seguro de poder usar async/await dentro de una función Promise.

Continuando, la variable de check comienza a hacer llamadas a la API ( getValue() también es una función que incluye los puntos finales de la API) para verificar el valor si está disponible o no. si es así, resuelva, si no, entonces rechace.

Así es como estoy ejecutando la función promiseFunc en secuencia:

 promiseFunc( myChosenValue1, myChosenValue2 ) .then( data => { return promiseFunc( valueFromFirstExecution1, valueFromFirstExecution2 ) }) .then( () => { console.log( 'Successfully executed both the functions' ); }) .catch( e => { console.log( e ); });

Esto es lo más lejos que podría llegar al escribir una función Promise y sé que hay varios problemas en el código anterior. La primera función se ejecuta correctamente, pero luego aparece este error TypeError: Cannot read property 'code' of undefined . Además, no estoy seguro de si se ejecutarían las llamadas a la API en setInterval. ¿Alguna idea?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Así que tienes un par de cosas sucediendo aquí:

  1. Desea sondear un proceso del lado del servidor para que se complete
  2. Desea llamar a otra función con el resultado de la finalización exitosa del proceso del lado del servidor.

Así que escribamos algunos ayudantes:

 // We need a way to wait for some amount of time before // retrying a request, sleep sleeps for n milliseconds const sleep = (n) => new Promise(res => setTimeout(res, n)); // We need a unique sentinel value so we know when we have actual // results from an API call instead of this default value const sentinel = {}; // or Symbol, whatever unique you prefer // poll will take the data necessary to make a fetch // request and repeat it every `interval` milliseconds // up to `maxRetries` until it gets a result const poll = async (url, fetchOpts, interval, maxRetries) => { let result = sentinel; // default value let ticker = 0; // current number of retries while (result === sentinel && ticker < maxRetries) { // make the api call const resp = await fetch(url, fetchOpts); const data = await resp.json(); // do we have a result? if (isDone(data)) { // whatever criteria == completion result = data; // breaks the loop } else { // wait `interval` milliseconds and try again. ticker++; await sleep(interval); } } // Oops! We didn't get an answer back from the // api in time if (result === sentinel) { throw new Error('Exceeded maxRetries!'); } return result; };

Así que ahora podemos hacer lo que queremos:

 // call this with the eventual result, *if* we // get one const onSuccess = (result) => {...}; // whatever // This is doing the actual work const doTheThing = async () => { await fetch(firstApiCall); // kick off the process try { // wait for completion const data = await poll(url, {}, 5000, 6); // ~30sec timeout // pass successful result onwards return onSuccess(data); } catch (err) { // Error bubbling is a little weird with async // functions, so we'll just handle it here and // return undefined console.error(err) return } };
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!