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

176
Vistas
¿Cómo esperar a que una solicitud de API complete una variable antes de pasarla a una página web como argumento?

Soy nuevo en JavaScript y parece que no puedo hacer que esto funcione, el tema de la prueba depende de la entrada del usuario... cuando el usuario presiona siguiente, obtengo el tema (esto también lleva al usuario a la página principal de la prueba), luego tengo que obtener datos de la API con el tema como parámetro... Tengo que procesar el resultado de la operación de obtención... Luego tengo que pasar esa información a la página principal del cuestionario... pero la variable que se supone para ser completado por la solicitud de recuperación aún no está definido cuando paso a la página principal del cuestionario

 var Allquestions; var sheetdb = require('sheetdb-node'); // create a config file var config = { address: 'https://sheetdb.io/api/v1/9djmf8ydc7hwy', }; //sheetdb // Create new client var client = sheetdb(config); function downloadquestions(topic) { console.log(topic); client.read({ limit: 2, sheet: topic }).then(function(data) { console.log(data + " in client.read func") processQuestions(data); }, function(err){ console.log(err); }); } async function processQuestions(data) { console.log(data + "data in process"); Allquestions = JSON.parse(data); console.log(Allquestions[0].Question + " This is defined"); } app.get("/", (req, res) => { res.render("pages/index", { title: "Home"}); }); // app.post("/" , urlencodedParser ,(req , res) => { // console.log(req.body.topic); // }) app.get("/questions", urlencodedParser , (req , res) => { downloadquestions(req.body.topic); console.log(Allquestions + " this is undefined"); res.render("/pages/quizpage" , {Allquestions}) })
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Hay algunos problemas con su código, tiene una cadena de promesa rota, client.read( es una promesa, y esa promesa no va a ninguna parte. O la devuelve o la await . Para poder await su necesitará también marque su ruta (req, res) como async también.

Su código está un poco mezclado, tiene Allquestions como una variable global, esto no es bueno para múltiples usuarios, ya que el último tema lo anulará cada vez.

También trate de evitar tragar excepciones en las funciones de utilidad, trate de mantener su manejo de excepciones en el nivel superior, por ejemplo. en su caso dentro de su controlador de req/res.

Entonces, con todo esto en mente, su código refactorizado podría verse como ->

 const sheetdb = require('sheetdb-node'); // create a config file const config = { address: 'https://sheetdb.io/api/v1/9djmf8ydc7hwy', }; //sheetdb // Create new client const client = sheetdb(config); async function downloadquestions(topic) { const data = await client.read({ limit: 2, sheet: topic }); return processQuestions(data); } function processQuestions(data) { return JSON.parse(data); } app.get("/", (req, res) => { res.render("pages/index", { title: "Home"}); }); app.get("/questions", urlencodedParser , async (req , res) => { try { const allQuestions = await downloadquestions(req.body.topic); res.render("/pages/quizpage" , {Allquestions}); } catch (e) { console.error(e); res.end('There was an error'); } })
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