trato de devolver datos en node.js desde una API, pero tengo problemas, porque necesito una función asíncrona, no pude entender con certeza el uso correcto de la promesa, probé todo y no pude no pongo el resultado en el return, solo en el console.log, alguien me ayuda?
const express = require('express') const MFA = require('mangadex-full-api') module.exports = { async indexManga(req, res) { const mangalist = MFA.login('DarksGol', 'R@ul1605', './md_cache/').then(async () => { manga = [] await MFA.Manga.search('Kiss').then(results => { results.forEach((elem, i) => { let obj = {} obj.status = elem.status obj.title = elem.title manga.push(obj) }) }).catch(console.error) return manga }).catch(console.error) console.log(await mangalist) return mangalist } }
no ocurrió ningún error, solo carga infinita a pedido
const express = require('express') const routes = express.Router() const searchManga = require('../src/controllers/searchManga') routes.get('/searchManga', searchManga.indexManga) module.exports = routes
No veo por qué esto causaría " carga infinita a pedido ", pero podría simplificar enormemente el código para solo
const express = require('express'); const MFA = require('mangadex-full-api'); module.exports = { async indexManga(req, res) { await MFA.login('DarksGol', 'R@ul1605', './md_cache/') const mangaList = []; const results = await MFA.Manga.search('Kiss'); results.forEach(elem => { mangaList.push({ status: elem.status, title: elem.title, }); }); return mangalist; }, };
Parece que indexManga
es un punto final. Cada función de punto final debe finalizar el ciclo de solicitud y respuesta enviando una respuesta ( res.send(), res.json(), res.end(), etc.). Si indexManga
es un punto final, la solución sería:
... //return mangalist res.send(mangalist)
o
//return mangalist res.json({ status: "success", message: "logged in successfully" })
Si es un entrometido:
async indexManga(req, res, next) { ... //return mangalist return next() }
EDITAR: está utilizando async/await
.then()
incorrectamente en algunos lugares. Prueba de esta manera:
module.exports = { indexManga(req, res) { MFA.login('DarksGol', 'R@ul1605', './md_cache/').then(() => { manga = [] MFA.Manga.search('Kiss').then(results => { results.forEach((elem, i) => { let obj = {} obj.status = elem.status obj.title = elem.title manga.push(obj) }) res.json({ status: "success", data: manga }) }).catch((err) => { res.json({ status: "fail", error: err }) }) }).catch((err) => { res.json({ status: "fail", error: err }) }) } }