Tengo una API express que lee mi base de datos de fauna. Tengo una configuración de clase llamada Base de datos que maneja todas mis consultas de fauna y un método asíncrono llamado getQuotes que esencialmente obtiene un documento de fauna, la estructura general es así:
async getQuotes() { // note, `query` is an async function const doc = this.client.query(...).then((res) => { const data = ...; // to keep this short I'm not gonna show this console.log("faunadb handler: " + data); // just for debug return Promise.resolve(data); }) }Luego, cuando inicio la API express, hago que llame al método getQuotes y registre los datos (solo para la depuración).
const quotes = db.getQuotes().then((quotes) => { console.log("fauna consumer: " + quotes); })Ahora, cuando ejecuto la aplicación, obtengo el siguiente resultado:
starting server on port.... ussual stuff fauna consumer: undefined faunadb handler: { ... } El código de consumidor de fauna se ejecuta antes de que obtengamos la promesa de la API de consulta de fauna. Necesito usar .then porque el nodo, por alguna razón, no me permite usar await. Alguien sabe cómo resolver esto? ¡Gracias! (usando la versión de nodo v16.14.0 , ejecutándose en Arch Linux )
No está devolviendo nada de su función getQuotes() . El retorno en su devolución de llamada solo regresará desde la devolución de llamada, no desde la función adjunta. Tampoco está esperando en ningún lado, lo que significa que su función asíncrona no esperará el resultado de su consulta.
Desde mi perspectiva, es mejor no confundir await y then . O usa uno u otro.
Recomendaría ir con await .
async getQuotes() { // note, `query` is an async function const res = await this.client.query(...) const doc = ...; // to keep this short I'm not gonna show this console.log("faunadb handler: " + doc); // just for debug return doc; }intenta usar await
async getQuotes() { const res = await this.client.query(...); const data = ...; console.log("faunadb handler: " + data); // just for debug return data; } // must be in async function const quotes = await db.getQuotes(); console.log("fauna consumer: " + quotes);