Tengo un controlador de ruta en express.js y dentro de él, estoy llamando a una función asíncrona que debería devolverme algún valor. Estoy usando promesas bluebird para manejar las promesas. A continuación se muestra un código de muestra.
router.js --------- router.post('/endpoint', (req, res) => { return Promise.try(() => serviceFile.validate()) .then(() => { console.log('Response: ', response); }) .catch((error) => { console.log('Error: ', error) // TypeError: expecting a function but got [object Promise] }) }) serviceFile.js -------------- async function validate() { return Promise.try(() => axios.post('/endpoint')) .then((response) => response.data) .catch((error) => { console.log('Error: ', error.response.data) // successfully printing the error data object throw error; }) } Cuando llamo a la validate() en el archivo Service.js , falla la solicitud (que quiero) e imprime correctamente el error. Pero no quiero manejar el error aquí, así que lo vuelvo a lanzar y espero manejarlo en el archivo router.js . Pero en el archivo router.js , recibo un error como undefined y dice TypeError: expecting a function but got [object Promise]
No tengo ninguna idea de dónde estoy haciendo mal. Cualquier ayuda sería muy apreciada.
no está claro qué hace serviceFile.validate a menos que esa sea la segunda función que enumeró, esta podría ser una forma más clara de usar promesas
router.post('/endpoint', async (req, res) => { try { const response = await serviceFile.validate() console.log('Response: ', response); } catch (err) { console.log('Error: ', error) } }) function validate () { return new Promise(async (resolve, reject) => { try { const res = await axios.post('/endpoint') resolve(res.data) } catch (err) { if (err.response && err.response.data) { reject(err.response.data) } else { reject(err) } } }) }