Resumen: crear mi propia API que devuelve la hora de la época e implica el uso de un servidor express.js, pero está ejecutando res.send() antes de la llamada a la función. Hice referencia a esta página, pero no ayudó. Esto es lo que tengo:
app.get('/timestampAPI', async (req, res,) => { try { let finalResult = await getTimeStamp(); res.send({ something: finalResult }); } catch (error) { console.log(error); } });Comenzará a ejecutar la función getTimeStamp(), y antes de que termine, ejecuta la función res.send() que aparece como '{}' porque finalResult no tiene un valor. getTimeStamp() es una función asíncrona. No estoy seguro de lo que estoy haciendo mal.
Editar: función getTimeStamp() :
async function getTimeStamp() { await axios.get('https://showcase.api.linx.twenty57.net/UnixTime/tounixtimestamp?datetime=now') .then(response => { // also used console.log(response.data.UnixTimeStamp), which returns the timestamp return response.data; }) .catch(error => { var errorMessage = error.response.statusText; console.log(errorMessage); }); }Otra edición: sí, la API a la que se hace referencia anteriormente devuelve el tiempo de época actual, pero CORS está bloqueando mi otro sitio para que no acceda directamente, por lo que no puedo usarlo en ese sitio, por lo que estoy usando node.js para para que pueda permitirme acceder a él a través de mi programa node.js. No podía pensar en otra manera
then no regresa de la función getTimeStamp , debe escribir su código en el patrón de resolve o using esperar como se muestra a continuaciónintente esto, asegúrese de escribir el nombre de campo correcto en el objeto de respuesta
async function getTimeStamp() { try{ const res = await axios.get('https://showcase.api.linx.twenty57.net/UnixTime/tounixtimestamp?datetime=now') return res.data }catch(error){ throw error }Como alternativa a la respuesta de Mohammad, también puede usar el resultado de la función getTimeStamp como una promesa y puede resolver su problema.
async function getTimeStamp() { return new Promise((resolve, reject) => { axios.get('https://showcase.api.linx.twenty57.net/UnixTime/tounixtimestamp?datetime=now') .then(response => { // also used console.log(response.data.UnixTimeStamp), which returns the timestamp resolve(response.data); }) .catch(error => { var errorMessage = error.response.statusText; console.log(errorMessage); reject(error); }); }) }O también reemplazaría await con return en la función getTimeStamp en su código si no desea devolver la promesa (lo cual no recomiendo). También debe arrojar el error en el bloque catch que se genera en la función getTimeStamp para detectar el error en el bloque try-catch que usa para llamar a app.get(...).