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

69
Views
La API de BestBuy no consultará en un bucle

Soy muy nuevo en Javascript y estoy tratando de utilizar la API de BestBuy para obtener datos en un número de SKU específico cada 3 segundos.

La llamada a la API funciona como se esperaba por sí sola, pero cuando muevo la llamada dentro de un ciclo while, no obtengo nada y no se activa la función console.log en la función.

No estoy seguro de adónde ir desde aquí y estoy empezando a preguntarme si esta llamada API solo se puede llamar por sí misma.

Agradecería cualquier ayuda.

 var bby = require('bestbuy')('<Actual BestBuy Api key in original code>'); var isSoldOut = true; while(isSoldOut) { console.log("HERE"); bby.products(6465789,{show:'sku,name,salePrice,onlineAvailability,inStorePickup,onlineAvailabilityUpdateDate'}).then(function(data){ console.log(data); if (data['onlineAvailability'] == false) { isSoldOut = false; console.log(isSoldOut); } }); wait(3000); } function wait(ms) { var d = new Date(); var d2 = null; do { d2 = new Date(); } while(d2-d < ms); }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Sus bucles while bloquean constantemente el hilo, por lo que su función de devolución de llamada no se puede ejecutar.

En lugar de los bucles while, puede usar un intervalo:

 var bby = require('bestbuy')('<Actual BestBuy Api key in original code>'); function check() { console.log("HERE"); bby.products(6465789,{show:'sku,name,salePrice,onlineAvailability,inStorePickup,onlineAvailabilityUpdateDate'}).then(function(data){ console.log(data); if (data['onlineAvailability'] == false) { clearInterval(loop); console.log("In Stock"); } }); } const loop = setInterval(check, 3000);

Incluso el limpiador puede estar usando async/await para esperar 3 segundos después de recibir cada respuesta:

 var bby = require('bestbuy')('<Actual BestBuy Api key in original code>'); const wait = require('util').promisify(setTimeout); async function check() { console.log("HERE"); const data = await bby.products(6465789,{show:'sku,name,salePrice,onlineAvailability,inStorePickup,onlineAvailabilityUpdateDate'}); console.log(data); if (data['onlineAvailability'] == false) { console.log("In Stock"); return; } await wait(3000); } check();
about 4 years ago · Juan Pablo Isaza Report

0

Hay varios puntos para mejorar su código:

  • Use setInterval para ejecutar código en intervalos regulares, en lugar de usar el bloqueo de giro en un ciclo while
  • Use async/await para mejorar la legibilidad
  • En lugar de marcar condition == false , simplemente marque !condition
  • En lugar de hacer if(!condition){x = false} , simplemente haz x = !condition
  • Utilice la notación de puntos en lugar de la notación de corchetes para acceder a la propiedad del objeto si el nombre de la propiedad no es variable. Esto puede aprovechar la inteligencia de IDE si la forma del objeto está debidamente documentada y reducir los errores tipográficos.

 const t = setInterval(async () =>{ const data = await bby.products(6465789, { show: 'sku,name,salePrice,onlineAvailability,inStorePickup,onlineAvailabilityUpdateDate' }); console.log(data); isSoldOut = !data.onlineAvailability; console.log(isSoldOut); if(isSoldOut) { clearInterval(t); } },3000);
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!