Estoy ejecutando el siguiente código en un archivo .ts en la siguiente carpeta API. Estoy tratando de esperar el resultado de una llamada a una API no oficial de Reverso ( https://www.npmjs.com/package/reverso-api ). El problema es que el siguiente código continúa esperando la solicitud incluso si ha llegado la respuesta de reverso y el valor se ha actualizado. ¿Cómo puedo hacer? El método reverso.getContext('Dog', 'English', 'German', ... ) devuelve una Promesa.
type Data = { responseWord : string } let r = 3; export default async function handler( req: NextApiRequest, res: NextApiResponse<Data>) { const Reverso = require('reverso-api'); const reverso = new Reverso(); console.log("1"); await reverso.getContext('Dog', 'English', 'German', (response : any) => { r = response?.text; console.log(r); return; }).catch((err : any) => { }); console.log("2"); res.status(200).json({ responseWord : `${r}` }); }reverso.getContext() se puede usar de ambas formas, usando el enfoque basado en devolución de llamada o usando promesas, ya que devuelve una promesa. La forma correcta de recuperar los datos de respuesta mediante una función asíncrona es esta:
const Reverso = require('reverso-api'); const reverso = new Reverso(); export default async function handler( req: NextApiRequest, res: NextApiResponse<Data>) { try { const { text } = await reverso.getContext('Dog', 'English', 'German'); res.status(200).json({ responseWord : `${text}` }); } catch(e){ console.log(e) } }La versión basada en devolución de llamada:
const Reverso = require('reverso-api'); const reverso = new Reverso(); export default function handler( req: NextApiRequest, res: NextApiResponse<Data>) : void { reverso.getContext('Dog', 'English', 'German', (response : any) => { res.status(200).json({ responseWord : response?.text }); }).catch((err : any) => { console.log(err) }); }