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

207
Views
Mientras que el ciclo con 2 condiciones no funciona como se esperaba

Quiero que mi ciclo while coincida con 2 condiciones para romper el ciclo: la res NO debe estar indefinida, que es el caso solo cuando el código de estado es 200, y obj.owner debe ser igual a algún valor que configuré. El propietario de esa página tarda un par de segundos en actualizarse, por lo que necesito que se ejecute el ciclo while hasta que el propietario actualice.

Aquí está la función de solicitud

 const getOwner = () => { const opts = { url: 'https://example.com', json: true, simple: false, resolveWithFullResponse: true } return request(opts) .then(res => { if (res.statusCode == 200) { const obj = { owner: res.body.owner } return obj } else { console.error(`Error: ${res.statusCode}`) } }) .catch(e => { console.error(`Panic: ` + e.message) }) }

Y aquí está el ciclo while

 let owner = await getOwner() while (!owner && owner.owner != 'some value') { owner = await getOwner() } console.log('Loop broken')

Cuando console.log(!owner, (owner.owner != 'some value')) después de la primera llamada a la función, antes de intentar ingresar al ciclo, devuelve false para la primera condición y true para la segunda.

Cuando el código de estado es distinto de 200, no devuelve el objeto, por lo que necesito esas 2 condiciones juntas, de lo contrario, el programa falla debido a que el owner no está definido.

Ahora, cuando ejecuto esto, siempre salta el ciclo sin importar qué, realmente estoy perdido en este punto.

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

0

En mi opinión, es una mala idea recorrer un recurso hasta obtener el resultado deseado.

Si tiene control sobre el recurso que está llamando, cámbielo para devolver el resultado de acuerdo con sus expectativas.

Si no tiene control sobre el recurso, en mi opinión, el recurso no debería devolver resultados diferentes en llamadas diferentes. Si obtiene una respuesta diferente en cada llamada, entonces el recurso no es idempotente. Es un mal diseño. Imagínese, estaría repitiendo n veces, con eso puede o no obtener los resultados que está buscando.

Sugeriría investigar la implementación y solucionar la raíz del problema, en lugar de solucionarlo.

about 4 years ago · Juan Pablo Isaza Report

0

getOwner devuelve una Promise . Tendrás que await por ello. Y no creo que realmente necesites el bucle while :

 let owner = await getOwner(); if(owner && owner.owner != 'some value') { /*do stuff with owner*/ } console.log(owner);
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!