Soy un poco nuevo en Node y Express.
Estoy tratando de crear una API que consume una API externa y devuelve el resultado como entrada a lo que muestro
¿Cómo obtengo el valor de salida de un método asíncrono como entrada y visualización usando el método de envío rápido?
ver mi código expreso a continuación
const express = require("express"); var AsyncMethod = require("./src/AsyncMethod");//works perfectly const app = express(); const port = 8000; app.get("/url", (req, res) => { var output = ""; var biller = new AsyncMethod(); try { output = await (biller.run()); .then(//need help here console.log("inside Main") res.send(output)) } catch (ex) { console.log("An error occurred"); res.send("An error occurred"); console.log(ex); } });debe esperar a que se complete la ejecución del método asíncrono utilizando el método .then() y devolver la respuesta de la devolución de llamada.
Uso Async/Await
const express = require("express"); var AsyncMethod = require("./src/AsyncMethod");//works perfectly const app = express(); const port = 8000; app.get("/url", async (req, res) => { var output = ""; var biller = new AsyncMethod(); try { output = await biller.run(); res.send(output) } catch (ex) { console.log("An error occurred"); res.send("An error occurred"); console.log(ex); } }); Usando promise
const express = require("express"); var AsyncMethod = require("./src/AsyncMethod");//works perfectly const app = express(); const port = 8000; app.get("/url", (req, res) => { var biller = new AsyncMethod(); biller.run().then(function(output){ res.send(output) }).catch(function(ex){ console.log("An error occurred"); res.send("An error occurred"); console.log(ex); }) });Miré el proyecto github al que publicaste un enlace en el comentario
.run necesita devolver una Promise si quieres await
Entonces, aquí se explica cómo hacerlo... las 5 líneas adicionales están marcadas //+++
var BaseSample = require('./BaseSample'); var GetBillers = function(){ //inherit BaseSample.call(this); } GetBillers.prototype.run = function(){ return new Promise((resolve, reject) => { //+++ this.billpayment.get_billers(function(err, res){ if(err) { //error executing request console.log("Error calling get billers "+JSON.stringify(err)); reject(err); //+++ } else{ //check if it was successful var statusCode = res.statusCode; if(statusCode === 200) {//request was successful var billerArray = JSON.parse(res.body).billers; var firstBiller = billerArray[0]; var billerId = firstBiller.billerid; var billername = firstBiller.billername; console.log(billerId+" "+billername); resolve(billerId+" "+billername); //+++ } else{//it was not successful for a reason console.log("FAILED: "+statusCode); reject(statusCode); //+++ } } }); }); //+++ } module.exports = GetBillers;Ah, y el código que publicaste debería parecerse un poco a
const express = require("express"); var AsyncMethod = require("./src/AsyncMethod");//works perfectly const app = express(); const port = 8000; app.get("/url", (req, res) => { var biller = new AsyncMethod(); try { const output = await biller.run(); console.log("inside Main") res.send(output)) } catch (ex) { console.log("An error occurred"); res.send("An error occurred"); console.log(ex); } });