Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

200
Vistas
While loop with 2 conditions not working as expected

I want my while loop to match 2 conditions in order to break the loop - res has to NOT be undefined, which is the case only when status code is 200, and obj.owner has to be equal to some value i set. It takes a couple of seconds for the owner on that page to update, so i need the while loop to run until the owner updates.

Here's the request function

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)
    })
}

And here's the while loop

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

console.log('Loop broken')

When I console.log(!owner, (owner.owner != 'some value')) after the first function call, before trying to enter into the loop, it returns false for the first condition, and true for the second.

When status code is other than 200, it doesnt return the object, so i need those 2 conditions together, as otherwise it crashes the program due to owner being undefined.

Now, when i execute this, it always skips the loop no matter what, im really lost at this point.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

In my opinion, it's a bad idea to loop through a resource until you get the intended result you are seeking.

If you have control over the resource that you are calling, change it to return the result according to your expectation.

If you do not have control over the resource, in my opinion, the resource should not be return different results on different calls. If you get a different response on each call, then the resource is not idempotent. It's a bad design. Imagine, you would be looping n times, with that you may or may not get the results you are looking for.

I would suggest looking into implementation and fixing the root of the problem, rather than work around.

about 4 years ago · Juan Pablo Isaza Denunciar

0

getOwner returns a Promise. You will need to await for it. And I don't think you really need the while loop:

let owner = await getOwner();
if(owner && owner.owner != 'some value') {
  /*do stuff with owner*/
}
console.log(owner);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda